我有一个
Cocoa应用程序发送一些数据,以及该数据的SHA1哈希值到Rails应用程序,该应用程序验证数据和哈希匹配,但是它们没有.
@H_301_2@确保我已经将Rash和Cocoa两侧的哈希数据的十六进制版本记录到控制台,并且它们完全匹配.
@H_301_2@以下是可可部分:
#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];@H_301_2@..和Rails:
Digest::SHA1.hexdigest(signed_data)@H_301_2@请注意,-hexadecimalString是NSData的自定义扩展(似乎没有内置),我已经测试过.该方法似乎不是问题. @H_301_2@那么,为什么我的SHA1哈希算不上相同的数据呢?有任何想法吗? @H_301_2@编辑:示例 @H_301_2@对于字符串“Hello World!”
Cocoa: f98ee9c814c2f3c66ccdca641298d12cd26741ec Rails: 2ef7bde608ce5404e97d5f042f95f89f1c232871@H_301_2@可可:
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@H_301_2@红宝石:
>> Digest::SHA1.hexdigest("Hello World!") => "2ef7bde608ce5404e97d5f042f95f89f1c232871"