代码之家  ›  专栏  ›  技术社区  ›  pascalbros

目标C中的hash256有问题

  •  0
  • pascalbros  · 技术社区  · 14 年前

    当我在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 回复  |  直到 14 年前
        1
  •  1
  •   Jeff    14 年前

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

    不确定长度是否是由业务编码引起的:考虑到这些东西,但这是我要试验的东西。

        2
  •  1
  •   tc.    14 年前

    你得到的字节 [inputString UTF8String] 但长度与 [inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding] . 这显然是错误的。此外(假设您的意思是“\xb4”并且它变成了非ASCII格式的东西),“\xb4”不太可能是ASCII格式的。nsstring的文档显示

    如果指定的编码无法用于转换接收器,则返回0

    所以你要计算空字符串的散列值。当然是错的。

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

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