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

标签 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?

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

相关文章:

c++ - LLVM 拒绝编译 C++ 源代码,奇怪的错误

php - 如何使用数据库和 PHP 在 googlemap 上创建标记

ios - mask 图像的背景颜色

objective-c - UIVIew 动画在 iOS 10 中无法正常工作

ios - 我在 iOS 上使用哪个 View 来选择电子邮件地址或电话号码?

iphone - 在 UISplitViewController 中设置主视图的显示/隐藏启用,仅用于横向模式下的一个 View Controller

xml - XSLT 2.0 : Substring-after on a for-each loop to get distinct-values

javascript - 使用 Strope.js 解析 XML websocket 响应

ios - 元数据被拒绝,我需要重新提交应用程序吗?

ios - 如何为新的和现有的应用程序减小我的应用程序大小?