[英]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.