gpt4 book ai didi

xcode - RNCryptor:在 Swift 中解密 AES128CBC

转载 作者:行者123 更新时间:2023-11-30 10:06:31 28 4
gpt4 key购买 nike

如何使用 RNCryptor (AES128CBC) 解密 NSData?我已经尝试理解文档:https://github.com/RNCryptor/RNCryptor-Spec/blob/master/draft-RNCryptor-Spec-v4.0.md

编辑:

class Decription{
func AES128(message: String, key: String, iv: String){
let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let ivData: NSData! = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let data: NSData! = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let cryptData = NSMutableData(length: Int(data.length) + kCCBlockSizeAES128)!

let keyLength = size_t(kCCKeySizeAES256)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding)

var numBytesEncrypted :size_t = 0

let cryptStatus = CCCrypt(
operation,
algoritm,
options,
keyData.bytes,
keyLength,
ivData.bytes,
data.bytes, data.length,
cryptData.mutableBytes,
cryptData.length,
&numBytesEncrypted
)

if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
print("Decrypted Result = \(NSString(data: cryptData, encoding: NSUTF8StringEncoding))")
} else {
print("Error: \(cryptStatus)")
}
}
}

我更改了链接到的代码片段@zaph。您可以看到上面的结果。

NSString(数据:cryptData,编码:NSUTF8StringEncoding)结果nil。有什么问题吗?

最佳答案

首先使用 RNCryptor 进行加密,而不是其他方法,因为 RNCryptor 不仅仅是 AES 加密,它是一种完整的安全加密方法,包括 key 派生和身份验证。请参阅RNCryptor-Spec了解更多信息。

如果您只想使用 Common Crypto 和 Swift 进行解密,请参阅此 SO Answer例如代码。

注意:示例代码只是这样,不应在生产代码中按原样使用。特别是 ECB 模式不安全,请使用带有随机 iv 的 CBC,并考虑向密码添加身份验证和 key 派生,例如 PBKDF2。

关于xcode - RNCryptor:在 Swift 中解密 AES128CBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com