Mam aplikację Cocoa, która wysyła pewne dane wraz ze skrótem SHA1 tych danych do aplikacji Rails, która sprawdza, czy dane i skrót są zgodne, ale tak nie jest.
Aby mieć pewność, zarejestrowałem szesnastkowe wersje danych, które są haszowane w konsoli zarówno po stronie Railsów, jak i Cocoa, i są one dokładnie zgodne.
Oto część dotycząca kakao:
#import <CommonCrypto/CommonDigest.h>
//...
- (NSData *)dataOfSHA1Hash
{
unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
CC_SHA1([self bytes], CC_SHA1_DIGEST_LENGTH, hashBytes);
return [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
}
//...
NSData *signatureData = [signedData dataOfSHA1Hash];
NSString *signature = [signatureData hexadecimalString];
..i szyny:
Digest::SHA1.hexdigest(signed_data)
Zauważ, że -hexadecimalString jest niestandardowym rozszerzeniem NSData (wydaje się nie być wbudowane), które przetestowałem. Ta metoda nie wydaje się stanowić problemu.
Dlaczego więc moje skróty SHA1 nie pasują do tych samych danych? Jakieś pomysły?
Edycja: przykład
Dla ciągu „Hello World!”
Cocoa: f98ee9c814c2f3c66ccdca641298d12cd26741ec Rails: 2ef7bde608ce5404e97d5f042f95f89f1c232871
Kakao:
NSMutableData *signedData = [[NSMutableData alloc] init];
[signedData appendData:[@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding]];
NSData *signatureData = [signedData dataOfSHA1Hash];
[signedData release];
NSString *signature = [signatureData hexadecimalString];
NSLog(@"Signature: %@", signature);
// output: Signature: f98ee9c814c2f3c66ccdca641298d12cd26741ec
Rubin:
>> Digest::SHA1.hexdigest("Hello World!")
=> "2ef7bde608ce5404e97d5f042f95f89f1c232871"
Node.js z YUI na serwerze. Obejrzyj ten film: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/
Facet w tym filmie Dav Glass pokazuje przykład użycia węzła do pobrania strony z serwisu Digg. Następnie podłączył YUI do chwyconego DOM i może nim całkowicie manipulować.
- person glenc   schedule 28.01.2011CC_SHA1
. Powinienem był użyć[data bytes]
. Rozpracowanie tego zajęło żenująco dużo czasu. - person Ben Scheirman   schedule 06.03.2012