bre*_*mes 5 cryptography ios swift cryptoswift
(Xcode 8,Swift 3)
使用CryptoSwift库,我想加密字符串并将其存储在coredata中,出于某种原因,密码字符串结果为nil,尽管密文具有128个值:
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
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用数据:字符串重载,将字节数组转换为数据对象.这也是零结果.
编辑/解决方案(根据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)
Run Code Online (Sandbox Code Playgroud)
AES加密数据是一组随机字节.如果您选择一组随机字节,则它不太可能是有效的UTF-8.如果您有数据并且想要一个字符串,则需要以某种方式对数据进行编码.最流行的方法是Base-64.请参阅相关Data.base64EncodedString()工具.你还需要从后来Data(base64Encoded:)重建你.DataString
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |