iOS13.0中的不安全.MD5得到错误的结果



当我使用Insecure.MD5.hash(data:data(获取数据的MD5结果时,我在iOS 13.0中发现结果不正确,这是我的代码:

if let data = "helloworld".data(using: .utf8) {
let digest = Insecure.MD5.hash(data: data)
for i in digest {
print(i)
}
let result = digest.map { String(format: "%02hhx", $0) }.joined()
print("StringMD5Result--(result)")
}

结果为fc5e038d38a57032085441e7fe7010b000000000,但correctResult应为fc5e38d38a57032085461e7Fe7010b0。

那么,这是苹果在iOS 13.0中的错误吗?

很可能不会,因为我无法重现您的结果。对我来说,这是应该的(我应用了一些风格上的改进(:

import Foundation
import CryptoKit
func md5(string: String) -> String {
let digest = Insecure.MD5.hash(data: Data(string.utf8))
return digest.map {
String(format: "%02hhx", $0)
}.joined()
}
print(md5(string: "helloworld")) // returns fc5e038d38a57032085441e7fe7010b0

我在iOS 13.0上遇到了和你一样的问题,我也认为这是苹果的错误。

我的解决方案

MD5散列函数生成的比特数是固定的,它生成了一个128比特的散列值。由于我们使用十六进制数来表示,而一个十六进制数占用4位,因此最终的MD5值由32个十六进制数来表示。

因此我们可以使用CCD_ 1函数来截取字符串。

替换:

let result = digest.map { String(format: "%02hhx", $0) }.joined()

let result = String(digest.map { String(format: "%02hhx", $0) }.joined().prefix(32))

相关内容

  • 没有找到相关文章

最新更新