【发布时间】:2019-02-24 13:32:29
【问题描述】:
我是加密和散列算法的新手。我需要使用 SHA-256 算法对带有密钥的字符串进行哈希处理。 我从堆栈溢出和其他一些教程中尝试了多个链接,使用这些链接,我在 iOS 中收到的输出与我在 Android 中获得的输出不同。我在两个平台上都使用了相同的字符串和密钥。
Android 代码片段 -
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(secret_key);
byte[] channelKeyLong = digest.digest(message.getBytes("utf-8"));
输入 -
secret_key = "35285324354d562c245b031232115124372e5242394f51301f62224e1e432910"
message = "Guest"
OUTPUT = "99D71664BD5A35E0185C020BACB709DEB24A81555E275CA9328F8CB4E6F186C3"
iOS 代码片段 -
extension String {
func generateSHA256(key: String) -> String {
var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), key, key.count, self, self.count, &digest)
let data = Data(bytes: digest)
return data.map { String(format: "%02hhx", $0) }.joined()
}
}
输入 -
secret_key = "35285324354d562c245b031232115124372e5242394f51301f62224e1e432910"
message = "Guest"
实施 -> 输出 = message.generateSHA256(secret_key)
`OUTPUT = "944a37b9768970c5da4f35295008470603391223a05d2b17eed668f1678d447c"'
请建议我可以在 iOS 中实现的任何其他方法,以产生与在 android 中接收到的相同的输出。
【问题讨论】:
-
我也浏览过 CryptoSwift 库,但找不到任何方法来复制 android 的输出。如果您能提供任何代码片段,将会很有帮助。
-
我认为 HMAC 不同于散列函数。您是否尝试过使用
CC_SHA256_Init()、CC_SHA256_Update()和CC_SHA256_Final()? -
嗨垫子,你能提供一些可以产生相同输出的示例代码吗?这将非常有帮助。谢谢
-
我也尝试了 CC_SHA256 函数 'CC_SHA256_Init()、CC_SHA256_Update() 和 CC_SHA256_Final()' 但没有成功。