gpt4 book ai didi

swift - 如何在 AES CryptoSwift 密码后将字节转换为 NSString

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:40 38 4
gpt4 key购买 nike

我正在使用 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. 不要使用 CryptoSwift,它既不快(比 Common Crypto 慢 500-1000 倍)也不安全(它缺乏实质性审查)。

  2. 加密数据与随机数据字节无法区分。

  3. 并非所有数据数组都可以转换为任何编码的字符串。有许多数据字节没有可打印的表示或字符串编码中的任何表示。这就是为什么原始数据字节通常被编码为 Base64 或十六进制字符串。

关于swift - 如何在 AES CryptoSwift 密码后将字节转换为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473630/

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