我在 Android 上有以下代码:
val digest = MessageDigest.getInstance("SHA-512")
digest.update("secretotpkey".toByteArray())
val sb = StringBuilder()
val bytes = digest.digest(value.toByteArray())
bytes.forEach {
sb.append(((it and 0xF) + 0x100).toString(16).substring(1))
}
val encryptedValue = sb.toString()
makeLog("Encrypted value is $encryptedValue")
return encryptedValue
我正在尝试使用 CryptoSwift 将其转换为 iOS。然而我得到了不同的结果。有什么解决办法吗?
var digest = Digest.sha512("secretotpkey".bytes)
print(digest)
let bytes = "54181474".bytes
print(bytes)
digest.append(contentsOf: bytes)
var blah = String()
for item in digest {
let a = Int(item & 0xF) + Int(0x100)
let b = (String(format:"%02X", a)).substring(range: NSRange(location: 1, length: 2))
print(b)
blah.append(b)
}
最佳答案
两个编码问题:
- 将键转换为字节时,您没有指示字符集(键首先应由字节组成,字符串不是键)。
- 对于 Kotlin 或 Swift,您的十六进制编码显然不正确;请使用预制的库调用,或者在 StackOverflow 上查找正确的代码。
这应该可以解决这个问题,因为除了调用标准化算法(否则为 SHA-512)之外什么也没有。
关于android - iOS 中的 SHA 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355364/