swift - 使用 CryptoSwift 从文件中获取哈希

标签 swift hash cryptoswift

所以我尝试从文件中获取散列。使用 CryptoSwift图书馆。 truth 是带有我从 VLC 网站获得的散列的变量,所以这应该是真的。但是,我生成的散列与我知道的散列不同。

我错过了哪一步?

代码:

let filePath = "/Users/pjc/Desktop/vlc-3.0.0.dmg"

let fileURL = URL(fileURLWithPath: filePath)
let truth = "e6f7179cb06809b6101803da3ac4191edb72ecf82f31b8ae7dbf010e1a78ba26"

do {
   let fileData = try Data.init(contentsOf: fileURL)
   print(fileData)
   let fileBytes = fileData.bytes
   let hash = fileBytes.sha256()
   print(hash.debugDescription)

} catch {

   //handle error
   print(error)
}

print(hash)
print(truth)

日志:

fileData: 46818658 bytes
hash.debugDescription: [230, 247, 23, 156, 176, 104, 9, 182, 16, 24, 3, 218, 58, 196, 25, 30, 219, 114, 236, 248, 47, 49, 184, 174, 125, 191, 1, 14, 26, 120, 186, 38]
hash: 105553117580736
truth: e6f7179cb06809b6101803da3ac4191edb72ecf82f31b8ae7dbf010e1a78ba26

最佳答案

[230, 247, 23, 156, 176, 104, 9, 182, 16, 24, 3, 218, 58, 196, 25, 30, 219, 114, 236, 248, 47, 49, 184, 174, 125, 191, 1, 14, 26, 120, 186, 38]

e6f7179cb06809b6101803da3ac4191edb72ecf82f31b8ae7dbf010e1a78ba26

只是相同哈希值的两种不同表示:第一个 作为整数数组,第二个作为具有十六进制的字符串 字节的表示。

CryptoSwift 库的 .toHexString() 方法创建了一个 来自数组的十六进制字符串,因此

print(hash.toHexString())

应该产生预期的结果。

关于swift - 使用 CryptoSwift 从文件中获取哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118913/

相关文章:

php - Xcode和PHP中的SHA1具有不同的结果

swift - 具有 AES128 CTR 模式的 CryptoSwift - 错误计数器增量?

ios - 同时使用滑动手势和触摸开始/移动/结束

ios - AVAudioPlayer 失败并出现错误 "The operation couldn’ t 无法完成。 (操作系统状态错误 2003334207。)”

c - 预处理器宏变量

arrays - 如何扩展数组的哈希值?

swift - 使用 CryptoSwift 和 CryptoJS 的 AES 加密

ios - Swift:在带有完成按钮的文本框上弹出 DatePicker

ios - Alamofire:如何获取部分响应 JSON