簡體   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