iOS:CCCrypt()哪个更安全kCCOptionECBMode或kCCModeCBC

时间:2015-11-12 05:14:54

标签: ios objective-c xml security encryption

//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?

关键是什么? 我使用的长度是128,算法:AES

我使用过的密钥是:@“ltd @ mpc”

强壮吗?或者我应该使用密钥:0xfedcba9876543210这样的东西?

1 个答案:

答案 0 :(得分:2)

CBC模式更安全,同样的随机iv需要用于加密和解密,它不需要保密。有关详细信息和示例图片,请参阅Block cipher mode of operation

使用密码时,使用密钥派生函数(如PBKDF2)从中创建随机密钥。

密钥长度128目前很好,我一般没有理由不使用更长的密钥。

考虑使用RNCryptor,它会处理所有这些并添加身份验证和版本控制。