我正在使用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")
}
非常感谢你的帮助,
1条答案
按热度按时间ohfgkhjo1#
1.不要使用CryptoSwift,它既不快(比Common Crypto慢500-1000倍),也不安全(缺乏实质性审查)。
1.加密数据与随机数据字节无法区分。
1.并非所有的数据数组都可以转换为任何编码的字符串。有许多数据字节没有可打印的表示或任何字符串编码的表示。这就是为什么原始数据字节通常被编码为Base64或十六进制字符串。