问题与目标C hash256
当我使用这个代码在我的iPhone应用程序生成hash256:问题与目标C hash256
unsigned char hashedChars[32];
NSString *inputString;
inputString = [NSString stringWithFormat:@"hello"];
CC_SHA256([inputString UTF8String],
[inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding ],
hashedChars);
NSData * hashedData = [NSData dataWithBytes:hashedChars length:32];
inputString的hash256,创建正确的,但如果我使用像这样的字符串@“\ x00 \ x25 \ x53 \ b4“,hash256与带有”\ x“字符的实际字符串不同。 我认为问题出在编码“UTF8”,而不是ascii。 谢谢!
我会怀疑第一个字符“\ x00” - 那会终止任何认为它处理“常规C字符串”的东西。
不确定lengthOfBytesUsingEncoding:是否考虑到了这些内容,但是我会尝试使用它。
问题是:如果我尝试插入“\ x”字符,则生成的sha256不正确,如果我用这些字符记录字符串,则不同于用python编写的相等字符串。请原谅我的蹩脚英语。 – pascalbros 2010-09-13 02:01:31
您得到的字节数为[inputString UTF8String]
,但长度为[inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]
。这显然是错误的。此外(假设你的意思是“\ xB4”,并且它变成了不是ASCII的东西),“\ xB4”不可能是ASCII。为NSString的文档说
返回0,如果指定的编码不能用来接收
所以你计算空字符串的哈希转换。当然这是错误的。
你就不太可能有问题,如果你只产生一次数据:
NSData * inputData = [inputString dataUsingEncoding:NSUTF8StringEncoding];
CC_SHA256(inputData.bytes, inputData.length, hashedChars);
无论如何,散列是不正确的。有任何想法吗? – pascalbros 2010-09-13 15:48:23
我发布了我的想法。 – 2010-09-22 23:11:59
你不缺少在X @ “\ X00 \ X25 \ X53 \ B4”?不应该是@“\ x00 \ x25 \ x53 \ xb4”。 – 2010-09-12 22:46:20
嗨pakzip,考虑到你真正想解决的问题之一是你的意见之一是Python实现和Objective-C之间的区别。所以我建议你在你的问题中加入以下信息:(1)“正确”例子的输入和输出,正确的意思是Python和Objective-C同意。 (2)“错误”示例的输入和输出(显示输入和Obj-C输出以及Python输出)。 (3)python源码。有了这些信息,我们应该能够帮助你! – idz 2012-05-30 09:11:48