当前位置:  开发笔记 > 后端 > 正文

我的Rails和Cocoa应用程序之间的SHA1哈希值不匹配

如何解决《我的Rails和Cocoa应用程序之间的SHA1哈希值不匹配》经验,为你挑选了1个好方法。

我有一个Cocoa应用程序将一些数据连同该数据的SHA1哈希发送到Rails应用程序,该应用程序验证数据和哈希匹配,但它们没有.

为了确保我已经在Rails和Cocoa端记录了散列到控制台的数据的十六进制版本,并且它们完全匹配.

这是可可部分:

#import 

//...

- (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"

Sijmen Mulde.. 8

发现错误,愚蠢的小事:

-CC_SHA1([self bytes], CC_SHA1_DIGEST_LENGTH, hashBytes);
+CC_SHA1([self bytes], [self length], hashBytes);

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



1> Sijmen Mulde..:

发现错误,愚蠢的小事:

-CC_SHA1([self bytes], CC_SHA1_DIGEST_LENGTH, hashBytes);
+CC_SHA1([self bytes], [self length], hashBytes);

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

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有