swift2 如何在AES CryptoSwift加密后将字节转换为NSString

c90pui9n  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(186)

我正在使用CryptoSwift来加密要传入URL的数据。要做到这一点,我需要将数据的数据类型设置为String以连接到NSURL请求中。加密数据后,它以字节为单位输出。我如何将字节转换为无意义的字符串以传入PHP脚本可以解密的URL?
我可以加密到UInt8,但是我不认为它是可能的,通过一个URL传递到PHP脚本,所以我需要使它成为一个字符串。
代码:

let string = "hello"
let input: [UInt8] = Array(string.utf8)
let key: [UInt8] = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
let iv: [UInt8] = AES.randomIV(AES.blockSize)
do {
    let encrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .CBC).encrypt(input, padding: PKCS7())
    print("Encrypted bytes: \(encrypted)")
    let str = String(bytes: encrypted, encoding: NSUTF8StringEncoding)
    print("String of encrypted data: \(str)") // prints a nil value
} catch AES.Error.BlockSizeExceeded {
    print("Block size exceeded")
} catch {
    print("Error encrypting or decrypting data")
}

非常感谢你的帮助,

ohfgkhjo

ohfgkhjo1#

1.不要使用CryptoSwift,它既不快(比Common Crypto慢500-1000倍),也不安全(缺乏实质性审查)。
1.加密数据与随机数据字节无法区分。
1.并非所有的数据数组都可以转换为任何编码的字符串。有许多数据字节没有可打印的表示或任何字符串编码的表示。这就是为什么原始数据字节通常被编码为Base64或十六进制字符串。

相关问题