繁体   English   中英

SHA-256快速密钥散列

[英]SHA-256 Hashing with secret key swift

我是加密和哈希算法的新手。 我需要使用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 =“ 944a37b9768970c5da4f35295008470603603391223a05d2b17eed668f1678d447c”'

请提出我可以在iOS中实施的任何其他方法,以产生与android接收的相同输出。

您的Android代码和iOS代码不相同。

您的Android代码仅计算消息中键值串联的SHA256摘要。

您首先要用密钥调用update ,然后用消息调用digest 该文档指出:

使用指定的字节数组对摘要执行最终更新,然后完成摘要计算。 也就是说,此方法首先调用update(input) ,将输入数组传递给update方法,然后调用digest()

另一方面,您的iOS代码正在使用提供的密钥来计算消息的HMAC。 这不是同一回事。

您需要以与Android相同的方式计算SHA256;

  • 使用CC_SHA256_Init
  • 使用您的密钥和消息呼叫CC_SHA256_Update
  • 调用CC_SHA256_Final获取哈希

在Swift中可能更容易使用SwiftyRSA 然后,您要做的就是创建一个用连接键和消息初始化的ClearMessage实例,然后在其上调用摘要函数。

不知道Android如何做SHA-256,但是对于iOS,我可以说,您正在执行的代码是完美的,并且结果是正确的。 您应该将问题更新为:“如何获得“与iOS相同的Android SHA-256”

您可以在此处在线检查SHA-256 HashMap

只需输入输入和密钥,然后从列表中选择SHA-256。

secret_key = "35285324354d562c245b031232115124372e5242394f51301f62224e1e432910"
message = "Guest"

您将看到输出,与您从问题中的iOS代码获得的输出相同。

944a37b9768970c5da4f35295008470603391223a05d2b17eed668f1678d447c

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM