Objective C中hash256的问题

时间:2010-09-12 20:51:16

标签: iphone objective-c sha256

当我使用此代码在我的iPhone应用程序中生成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。 谢谢!

2 个答案:

答案 0 :(得分:1)

我会怀疑第一个字符“\ x00” - 这会终止任何认为它处理“常规C字符串”的东西。

不确定lengthOfBytesUsingEncoding:是否将这些内容考虑在内,但是我会尝试使用它。

答案 1 :(得分:1)

您获得的字节数为[inputString UTF8String],但长度为[inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]。这显然是错误的。此外(假设您的意思是“\ xB4”并且它变成不是ASCII的东西),“\ xB4”不太可能是ASCII。 NSString的文档说

  

如果指定的编码不能用于转换接收器

,则返回0

所以你要计算空字符串的哈希值。当然这是错误的。

如果您只生成一次数据,则不太可能遇到问题:

NSData * inputData = [inputString dataUsingEncoding:NSUTF8StringEncoding];
CC_SHA256(inputData.bytes, inputData.length, hashedChars);