android - iOS 中的 SHA 加密

标签 android swift kotlin encryption sha

我在 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)
}

最佳答案

两个编码问题:

  1. 将键转换为字节时,您没有指示字符集(键首先应由字节组成,字符串不是键)。
  2. 对于 Kotlin 或 Swift,您的十六进制编码显然不正确;请使用预制的库调用,或者在 StackOverflow 上查找正确的代码。

这应该可以解决这个问题,因为除了调用标准化算法(否则为 SHA-512)之外什么也没有。

关于android - iOS 中的 SHA 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355364/

相关文章:

android - 如何在 Android 中压缩两个 Observables?

swift - ARKit - 如何使用 SceneKit 选择特定节点

swift - 快速崩溃日志

ios - 带有嵌入式 Citrix MDX 工具包的 iOS 应用程序崩溃并出现 "unable to obtain bundle for localization"错误

android - Jetpack Compose TextField InputFilter 仅具有货币正则表达式输入

kotlin - Kotlin JS-字符串到数字的转换?

android - 使用 ADB 命令了解使用 adb 聚焦的应用程序名称

android - 你能帮我理解 Android SDK 中的这些信息吗

android - 如何禁用在软键盘上显示 "suggestions"

android - Kotlin 中的 fragment