我想在CryptoSwift库中使用Swift中的aes-128-ctr,但是由此产生的密文太长。Swift - AES 128 ctr,密文太长
我的IV是16字节,salt 32字节,而且aes明文也是32字节,为什么产生的密文是48字节,因此用另外的16字节填充?
let salt: [UInt8] = Array("tkmlidnonknkqgvapjrpdcductebsozn".utf8)
let derivedKey = try PKCS5.PBKDF2(password: password, salt: salt, iterations: numberOfIterations, variant: .sha256).calculate()
let iv: [UInt8] = Array("abcdefgthksdfghj".utf8)
let aesKey: [UInt8] = Array(derivedKey[..<16])
let aes = try AES(key: aesKey, blockMode: .CTR(iv: iv))
let ciphertext = try aes.encrypt(password)
这里的密码是提到的32字节的明文。
此外,有没有什么办法可以产生随机盐?我发现
let iv: [UInt8] = AES.randomIV(AES.blockSize)
生成一个随机IV,但是我怎么得到这样的盐?
它是最好避免使用CryptoSwift,其他的事情比基于Common Crypto的实现慢500到1000倍。 Apple的Common Crypto已通过FIPS认证,并且经过充分审查,使用CryptoSwift正在考虑正确性和安全性。 – zaph