swift - cccrypt 在 swift 4 中生成奇怪的输出
问题描述
我试图编写一个基于 CCCrypt 的加密(AESCBC256)函数,而 CCCrypt 正在生成一个随机值。
例如,当我将 1234567 传递给函数时,它将为相同的 iv 和 Key 返回“HlFP2rCmycZS1269Cm47Q==”或“TTuSJrBcsOmOCDHc5IQ8Dw==”。
这是iv:b5f89591,关键是:366e9c1b4b2ed2b1daf751d7500aaa01
func encrypt(Value: String)->String{
let keyData = keyString.data(using: .utf8, allowLossyConversion: false)!
let iv = SecretKey.data(using: .utf8, allowLossyConversion: false)!
let message = SecretKey+Value
let data = message.data(using: .utf8, allowLossyConversion: false)!
let cryptData = NSMutableData(length: Int(data.count) + kCCBlockSizeAES128)!
let keyLength = size_t(kCCKeySizeAES256)
let operation: CCOperation = CCOperation(UInt32(kCCEncrypt))
let algoritm: CCAlgorithm = CCAlgorithm(UInt32(kCCAlgorithmAES128))
let options: CCOptions = CCOptions(UInt32(kCCOptionPKCS7Padding))
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
keyData.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in return bytes},
keyLength,
iv.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in return bytes},
data.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in return bytes},
data.count,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
return String(describing: cryptData.base64EncodedString(options: .lineLength64Characters))
}else{
return ""
}
}
解决方案
您的 IV 长度错误。它有 8 个字节长,但 AES 需要 16 个字节的 IV,因此它从内存中读取其他 8 个字节的随机数据。
推荐阅读
- istio - istio 从 1.4.6 升级 -> 1.5.0 抛出 istiod 错误:远程错误:tls:错误解密消息
- ubuntu - Vim 映射错误。映射
导致在 ubuntu 19.10 eoan 中映射 - python - Python 对象未使用 C API 完全初始化
- javascript - 将参数传递到 url
- javascript - 简单的解决方案删除 JS 数组中的重复项。必须使用 push 或 pop 和 forEach
- javascript - 如何在 Cordova 中读取/写入本地 json 或文本?
- javascript - 如何使用anychart js以下拉值的功能在图表中显示数据?
- python - k-means++ 是否意味着每次都是完美的?还有哪些其他初始化策略可以产生最好的 k-means?
- postgresql - 为什么dotPeek不能反编译postgres.exe?
- java - 在 Java 中使用 Instagram4j 与 Instagram 连接的问题