在iOS上使用SHA256哈希处理技术

3

我在Stack Overflow上看了至少6页关于iOS和SHA256的内容,但仍然无法理解其中的问题。

通常情况下,我使用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相同,这样将同一值传递给任一方法都应该产生相同的值?

感谢您的帮助


可能是重复问题:https://dev59.com/6G025IYBdhLWcg3wFxqa - ldiqual
1个回答

0

很抱歉我来晚了。

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

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

但是你应该使用[data description]NSData转换为你需要的形式,就像如何将NSdata转换为十六进制字符串中所描述的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接