//Stateless, one-shot encrypt operation
CCCryptorStatus cryptStatus = CCCrypt(
kCCEncrypt, //Operation Encrypt or Decrypt
kCCAlgorithmAES128, //Encrypt algorithm to be used
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128, //Key length
nil, //In ECB mode ignored
[datainput bytes], //Data to encrypt
dataLength, //Length of data
buffer, //Data after encrypt
bufferSize, //Size of data after encrypt
&numBytesEncrypted); //Onsuccess no.of bytes written
我有一个文件,我想加密它,我正在使用上述功能。加密和解密工作正常!
但我担心的是:cccrypt() 中有选项可以使用默认 CBC 模式或指定 ECB 模式。我正在使用 ECB 模式,所以如果我使用带有 IV 的 CBC 模式,那么它会提供更安全的加密吗?
简而言之,我应该使用默认的 CBC 模式还是 ECB 模式?为什么?
IV 呢? 指定 IV 更长的字符串会使加密更安全和随机吗? 对于 ECB 模式,它将被忽略。如果我使用 CBC 模式,那么 IV 应该是什么?请提供一个有用的例子。
对于同一个文件的加密和解密,IV应该相同吗?或者可以是不同的 IV?
那 key 呢? 我使用的长度是128,算法:AES
我用过的 key 是:@"ltd@mpc"
强吗?或者我应该使用 key: 0xfedcba9876543210 这样的东西吗?
最佳答案
CBC模式更安全,加解密需要用同一个随机iv,不需要保密。参见 Block cipher mode of operation获取更多信息和示例图片。
使用密码时,使用 key 派生函数(例如 PBKDF2)从中创建随 secret 钥。
目前 128 的 key 长度是可以的,我通常没有理由不使用更长的 key 。
考虑使用 RNCryptor ,它会处理所有这些并添加身份验证和版本控制。
关于iOS:CCCrypt() kCCOptionECBMode 和 kCCModeCBC 哪个更安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33664874/