【问题标题】:Working with SHA256 hashing on iOS在 iOS 上使用 SHA256 散列
【发布时间】:2012-09-16 10:05:21
【问题描述】:

我已经查看了至少 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 行为相同的类别,以便将相同的值传递给任一方法应该产生相同的值?

感谢您的帮助

【问题讨论】:

标签: ios iphone encryption hash sha256


【解决方案1】:

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

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

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

但是您应该使用[data description]NSData 转换为您需要的形式,如How can i convert NSdata to hex string? 中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2019-10-04
    • 1970-01-01
    • 2020-05-30
    • 2015-12-14
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多