对于使用CCCrypt()的AES128,密钥可以长于128位吗?

时间:2011-10-14 16:08:23

标签: ios cryptography aes commoncrypto

我正在使用CCCrypt方法。

我可以使用比128bit更长的密钥吗?可以任意长吗?或者也许是128的倍数?

如果是这样,我该怎么做?

我认为这不可能,但我找到了这个文字:here

  

某些算法(如AES和RSA)允许使用不同长度的密钥,但其他算法是固定的,例如DES和3DES。使用较长密钥进行加密通常意味着对邮件恢复的抵抗力更强。像往常一样,安全性和时间之间需要权衡,因此请适当选择密钥长度。

AES如何允许不同的长度,是否忽略高于128的位?

我把头发拉过来。

2 个答案:

答案 0 :(得分:7)

AES(Advanced Encryption Standard)实际上是三个相关分组密码算法(或算法对,如果单独计算加密和解密)的集合。它们都工作在128位块(16字节)上。

最常用的是AES-128,它采用128位密钥(即16字节)。 AES-192采用192位密钥(24字节),AES-256采用256位密钥(32字节)。

这三种算法的工作方式类似,但仍然不同(较长的密钥需要更长的时间,因为它们会对内部混淆操作进行更多“回合”,因此密钥的所有位都会以某种方式影响所有位密文)。因此,所有这些算法的所有这些密钥都以不同方式加密和解密(即没有AES-256密钥与AES-128密钥完全相同)。

那就是说,遗憾的是我不知道CommonCrypto库是否支持AES的所有变体,如果是(我想的话),如何选择正确的。

答案 1 :(得分:5)

Paulo解释非常好!并且比关于这个主题的Apple文档要好得多;-)

现在把这些知识放在iOS上下文中......你需要知道cccrypt(就像在 man 页面中命名的那样)通常被命名为CommonCrypto(可以便于您的搜索)在网站的其他地方。

然而,除非你意识到这部分是open source software并且真的缺乏文档,否则你找不到多少。

但是一旦你找到了这个,你可以通过源代码搜索找到CommonCrypto.h发现你可以使用的枚举,其中包括: kCCKeySizeAES128 ,< strong> kCCKeySizeAES192 和 kCCKeySizeAES256 - 所以您可以在iOS上使用 256位密钥和AES。