Swift Sha512 加密(翻译 Kotlin 代码)
Posted
技术标签:
【中文标题】Swift Sha512 加密(翻译 Kotlin 代码)【英文标题】:Swift Sha512 Encryption ( translate Kotlin code ) 【发布时间】:2022-01-19 09:43:24 【问题描述】:这是 Kotlin 代码:
private fun verify(inputDataToVerify: String, signature: String): Boolean
return try
val pubKey = "XXXMYPUBKEYXXX"
val bytesFromPropFile = pubKey.toByteArray()
val keySpec = X509EncodedKeySpec(Base64.decode(bytesFromPropFile, Base64.DEFAULT))
val keyFactory = KeyFactory.getInstance("RSA")
val publicKey = keyFactory.generatePublic(keySpec)
Signature.getInstance("SHA512WithRSA").run
initVerify(publicKey)
update(inputDataToVerify.toByteArray())
verify(Base64.decode(signature.toByteArray(), Base64.DEFAULT))
catch (ex: Exception)
Timber.e(ex)
false
我必须将这段代码转换为 Swift,因为我需要在我的 ios 应用程序中使用相同的行为,但我对加密真的很陌生。 我能怎么做?我需要第三方库吗?
【问题讨论】:
【参考方案1】:您不需要加密任何东西,您需要验证签名。算法是:
SubjectPublicKeyInfo
或 spki
用于公钥(在 X509 证书标准中定义,因此得名);
旧的 RSA / PKCS#1 签名验证算法(显然使用 SHA-512 作为哈希算法)。
请注意,toByteArray()
默认使用 UTF-8 将字符串编码为二进制。显然,在 base 64 解码之前并不需要它,但是是的......
【讨论】:
【参考方案2】:我用 SwiftyRSA 找到了一个解决方案,就是这个方法
private func verifySignature(inputDataToVerify: String, signature: String) -> Bool
let pubKeyString = environmentService.getNexiPubKey()
do
let publicKey = try PublicKey(pemEncoded: pubKeyString)
let clear = try ClearMessage(string: inputDataToVerify, using: .utf8)
let sign = try Signature(base64Encoded: signature)
let isSuccessfull = try clear.verify(with: publicKey, signature: sign, digestType: .sha512)
return isSuccessfull
catch let error
print(error)
return false
【讨论】:
以上是关于Swift Sha512 加密(翻译 Kotlin 代码)的主要内容,如果未能解决你的问题,请参考以下文章
如何为一个密码实现sha 512,md5和salt加密[重复]