3

我已经看过至少 6 页关于 iOS 和 SHA256 的 SO,但我仍然无法弄清楚发生了什么。

通常,我习惯于在 PHP 中使用该hash()函数执行 SHA256,它返回一个字符串值,例如:db1204372d8d9f14acc608b497227047d63ad868987883d0a29198be8e6ce853

我正在尝试在我的 iOS 应用程序中实现 SHA256,以加强应用程序和服务器之间的安全性,但编码部分让我头疼......

我正在使用 NSData 类别:

+ (NSData *)sha256:(NSData *)data {

NSMutableData *out = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];

CC_SHA256(data.bytes, data.length,  out.mutableBytes);

if ( CC_SHA256(data.bytes, data.length, out.mutableBytes) ) return out;

return nil;
}

但是,无论我如何尝试将生成的 NSData 对象编码为 NSString (发送到服务器),我最终都会得到这样的字符串ã°ÄBüûôÈo¹$'®AädL¤xR¸U

我的问题 - 如何实现与 行为相同的类别,hash以便将相同的值传递给任一方法应该产生相同的值?

感谢您的帮助

4

1 回答 1

0

对不起,我参加聚会很晚了。

从 php 得到的结果是每个字节的十六进制值的串联。您从 ios 获得的值是实际的字节字符串。

我怀疑你正在使用类似的东西[[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding]来获取字符串。

但是您应该转换NSData为您需要使用的形式[data description],如如何将 NSdata 转换为十六进制字符串?.

于 2014-01-20T03:35:07.700 回答