gpt4 book ai didi

ios - CryptoSwift AES128-CBC 与 Swift

转载 作者:行者123 更新时间:2023-11-28 08:44:44 26 4
gpt4 key购买 nike

我在解密 AES128CBC 加密的 JSON 时遇到此错误:

assertion failed: Block size and Initialization Vector must be the same length!: file ##### for iOS/CryptoSwift/Sources/CryptoSwift/AES.swift, line 97

我正在使用带有最新 Xcode 的 CryptoSwift 框架。

我的方法:

func aes128(key: String, iv: String) throws -> String?{
if let aes: AES = try AES(key: key, iv: iv, blockMode: .CBC){
if let encrypted: [UInt8] = try aes.encrypt([UInt8](self.utf8), padding: PKCS7()){
return String(data: NSData.withBytes(encrypted), encoding: NSUTF8StringEncoding)
}
}

return nil
}

调用:

do{
print(try dataStr.aes128("8e0c0e73f97f2eb386ad75ba86051334", iv: "aa17ffc4ea4b1eac8fa0b56872f34e5f"))
}catch{

}

最佳答案

我的方法:

func aes128(key: [UInt8], iv: [UInt8]) throws -> String?{
let data = NSData(base64EncodedString: self, options: NSDataBase64DecodingOptions(rawValue: 0))
let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data!.arrayOfBytes(), padding: PKCS7())
let decData = NSData(bytes: dec, length: Int(dec.count))
let result = NSString(data: decData, encoding: NSUTF8StringEncoding)
return String(result!)
}

电话:

do{
let secret: [UInt8] = self.getAuthSecret(.LoginSecret)!.byte
let ivSlice = secret[0..<16]
let ivArray = Array<UInt8>(ivSlice)

let keySlice = secret[16..<32]
let keyArray = Array<UInt8>(keySlice)

print(try dataStr.aes128(keyArray, iv: ivArray))
}catch{

}

关于ios - CryptoSwift AES128-CBC 与 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35632521/

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