Swift Sha512加密(翻译Kotlin代码)
Swift Sha512 Encryption ( translate Kotlin code )
这是 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 应用程序需要相同的行为,但我对加密真的很陌生。
我能怎么做?我需要第三方库?
您不需要加密任何东西,您需要验证签名。这些算法是:
SubjectPublicKeyInfo
或 spki
用于 public 密钥(如 X509 证书标准中所定义,因此得名);
- 旧的RSA/PKCS#1签名验证算法(显然是用SHA-512作为哈希算法)。
请注意,toByteArray()
默认使用 UTF-8 将字符串编码为二进制。显然在 base 64 解码之前不应该真的需要它,但是是的...
我找到了 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
}
}
这是 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 应用程序需要相同的行为,但我对加密真的很陌生。 我能怎么做?我需要第三方库?
您不需要加密任何东西,您需要验证签名。这些算法是:
SubjectPublicKeyInfo
或spki
用于 public 密钥(如 X509 证书标准中所定义,因此得名);- 旧的RSA/PKCS#1签名验证算法(显然是用SHA-512作为哈希算法)。
请注意,toByteArray()
默认使用 UTF-8 将字符串编码为二进制。显然在 base 64 解码之前不应该真的需要它,但是是的...
我找到了 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
}
}