加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – SHA1哈希与Rails和Cocoa应用程序之间不匹配

发布时间:2020-12-16 20:13:12 所属栏目:百科 来源:网络整理
导读:我有一个 Cocoa应用程序发送一些数据,以及该数据的SHA1哈希值到Rails应用程序,该应用程序验证数据和哈希匹配,但是它们没有. 确保我已经将Rash和Cocoa两侧的哈希数据的十六进制版本记录到控制台,并且它们完全匹配. 以下是可可部分: #import CommonCrypto/Com
我有一个 Cocoa应用程序发送一些数据,以及该数据的SHA1哈希值到Rails应用程序,该应用程序验证数据和哈希匹配,但是它们没有.

确保我已经将Rash和Cocoa两侧的哈希数据的十六进制版本记录到控制台,并且它们完全匹配.

以下是可可部分:

#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];

..和Rails:

Digest::SHA1.hexdigest(signed_data)

请注意,-hexadecimalString是NSData的自定义扩展(似乎没有内置),我已经测试过.该方法似乎不是问题.

那么,为什么我的SHA1哈希算不上相同的数据呢?有任何想法吗?

编辑:示例

对于字符串“Hello World!”

Cocoa: f98ee9c814c2f3c66ccdca641298d12cd26741ec
Rails: 2ef7bde608ce5404e97d5f042f95f89f1c232871

可可:

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

红宝石:

>> Digest::SHA1.hexdigest("Hello World!")
=> "2ef7bde608ce5404e97d5f042f95f89f1c232871"

解决方法

发现错误,愚蠢的小东西:
-CC_SHA1([self bytes],hashBytes);
+CC_SHA1([self bytes],[self length],hashBytes);

我发送摘要的长度,而不是数据的长度.不知道我怎么能犯这样的错误 – 然后忽略它几个小时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读