了解 SHA1-UPDATE 和 SHA1-FINAL 函数
Understanding the SHA1-UPDATE and SHA1-FINAL functions
Swift5,iOS14
试图理解别人的代码,我需要一些帮助,因为但我不确定我是否理解 SHA1_UPDATE SHA1_FINAL 功能是否清楚。
这是在做什么--
private func computeHash() -> Data {
let identifierData = getDeviceIdentifier()
var ctx = SHA_CTX()
SHA1_Init(&ctx)
// 它创建标识符字节的 sha-1 哈希并将它们放入 &CTX 内存
let identifierBytes: [UInt8] = .init(identifierData)
SHA1_Update(&ctx, identifierBytes, identifierData.count)
// 然后它创建 opaqueBytes 的 sha-1 散列,然后将它们添加到? &CTX 内存?
let opaqueBytes: [UInt8] = .init(opaqueData!)
SHA1_Update(&ctx, opaqueBytes, opaqueData!.count)
// 再做一遍,创建 bundleBytes 的 sha-1 哈希,然后将它们添加到 &CTX 内存
let bundleBytes: [UInt8] = .init(bundleIdData!)
SHA1_Update(&ctx, bundleBytes, bundleIdData!.count)
// 然后用数据创建另一个?
var hash: [UInt8] = .init(repeating: 0, count: 20)
SHA1_Final(&hash, &ctx)
return Data(bytes: hash, count: 20)
}
// it creates a sha-1 hash of identifier bytes and puts them into &CTX memory
这就是你出错的地方。它不会创建字节的 SHA-1 散列。它使用数据更新 SHA 上下文(状态)。尚未计算最终哈希值。
SHA1_Final(&hash, &ctx)
此时,哈希是根据当前的SHA上下文计算的,它累积了所有的数据。
确实,在 SHA-1 中,最终哈希中保留了内部状态,这允许 class 次称为 Length extension attacks 的攻击。但这是算法的弱点,不是设计目标。
Swift5,iOS14
试图理解别人的代码,我需要一些帮助,因为但我不确定我是否理解 SHA1_UPDATE SHA1_FINAL 功能是否清楚。
这是在做什么--
private func computeHash() -> Data {
let identifierData = getDeviceIdentifier()
var ctx = SHA_CTX()
SHA1_Init(&ctx)
// 它创建标识符字节的 sha-1 哈希并将它们放入 &CTX 内存
let identifierBytes: [UInt8] = .init(identifierData)
SHA1_Update(&ctx, identifierBytes, identifierData.count)
// 然后它创建 opaqueBytes 的 sha-1 散列,然后将它们添加到? &CTX 内存?
let opaqueBytes: [UInt8] = .init(opaqueData!)
SHA1_Update(&ctx, opaqueBytes, opaqueData!.count)
// 再做一遍,创建 bundleBytes 的 sha-1 哈希,然后将它们添加到 &CTX 内存
let bundleBytes: [UInt8] = .init(bundleIdData!)
SHA1_Update(&ctx, bundleBytes, bundleIdData!.count)
// 然后用数据创建另一个?
var hash: [UInt8] = .init(repeating: 0, count: 20)
SHA1_Final(&hash, &ctx)
return Data(bytes: hash, count: 20)
}
// it creates a sha-1 hash of identifier bytes and puts them into &CTX memory
这就是你出错的地方。它不会创建字节的 SHA-1 散列。它使用数据更新 SHA 上下文(状态)。尚未计算最终哈希值。
SHA1_Final(&hash, &ctx)
此时,哈希是根据当前的SHA上下文计算的,它累积了所有的数据。
确实,在 SHA-1 中,最终哈希中保留了内部状态,这允许 class 次称为 Length extension attacks 的攻击。但这是算法的弱点,不是设计目标。