gpt4 book ai didi

ios - CryptoSwift - 将 UInt8 数组转换为字符串解析为 nil

转载 作者:搜寻专家 更新时间:2023-10-30 23:01:10 26 4
gpt4 key购买 nike

(Xcode 8、 swift 3)

使用 CryptoSwift 库,我想加密一个字符串并将其存储在核心数据中,出于某种原因,尽管密文具有 128 个值,但密文结果为 nil:

let aes = try AES(key: pw, iv: nil, blockMode: .CBC, padding: PKCS7())
let ciphertext = try aes.encrypt(token.utf8.map({$0}))
let cipherstring = String(bytes:ciphertext, encoding: String.Encoding.utf8) // always nil

我也尝试过使用 data: string 的重载,将字节数组转换为数据对象。结果也为零。

编辑/解决方案(根据 Rob Napier 的回答)

// encode/convert to string
let aes = try AES(key: pw, iv: nil, blockMode: .CBC, padding: PKCS7())
let ciphertext = try aes.encrypt(token.utf8.map({$0}))
let cipherstring = Data(bytes: ciphertext).base64EncodedString()
// decode
let aes = try AES(key: pw, iv: nil, blockMode: .CBC, padding: PKCS7())
let cipherdata = Data(base64Encoded: cipherstring)
let ciphertext = try aes.decrypt(cipherdata!.bytes)
let token = String(bytes:ciphertext, encoding:String.Encoding.utf8)

最佳答案

AES 加密数据是一串随机的字节。如果您随机选择一堆字节,则它不太可能是有效的 UTF-8。如果您有数据并且想要一个字符串,则需要以某种方式对数据进行编码。最流行的方法是 Base-64。请参阅 Data.base64EncodedString() 以获取执行此操作的工具。您还需要 Data(base64Encoded:) 稍后从 String 重建您的 Data

关于ios - CryptoSwift - 将 UInt8 数组转换为字符串解析为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40724208/

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