【问题标题】:Problem with hash256 in Objective CObjective C中hash256的问题
【发布时间】:2010-09-13 23:29:13
【问题描述】:

当我使用此代码在我的 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。 谢谢!

【问题讨论】:

  • 你不是在@"\x00\x25\x53\b4" 中缺少一个 x 吗?不应该是@"\x00\x25\x53\xb4"。
  • 您好 pakzip,鉴于您真正要解决的问题下面的一个 cmets 是 Python 实现和 Objective-C 实现之间的区别。所以我可以建议您在您的问题中添加以下信息:(1)“正确”示例的输入和输出,其中正确意味着 Python 和 Objective-C 同意。 (2) “不正确”示例的输入和输出(显示输入和 Obj-C 输出以及 Python 输出)。 (3)python源码。有了这些信息,我们应该能够为您提供帮助!

标签: iphone objective-c sha256


【解决方案1】:

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

不确定 lengthOfBytesUsingEncoding: 是否考虑了这些东西,但我会尝试一下。

【讨论】:

  • 问题是:如果我尝试插入“\x”字符,则生成的 sha256 不正确,如果我用这些字符记录字符串,则与用 python 编写的相等字符串不同。原谅我蹩脚的英语。
【解决方案2】:

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

如果指定的编码不能用来转换接收者,则返回0

所以你正在计算空字符串的哈希值。当然是错的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2011-01-27
    相关资源
    最近更新 更多