对于使用CCCrypt()的AES128,密钥可以长于128位吗?
我正在使用CCCrypt
方法。
我可以使用比128bit更长的密钥吗? 可以任意长吗? 或者可能是128的倍数?
如果是这样,我该怎么做?
我没有想到这可能,但我找到了这个文字: 这里
某些算法(如AES和RSA)允许使用不同长度的密钥 ,但其他算法是固定的,例如DES和3DES。 使用较长密钥进行加密通常意味着对邮件恢复的抵抗力更强。 像往常一样,安全性和时间之间存在权衡,因此请适当选择密钥长度。
AES如何允许不同的长度,它是否忽略高于128的位?
我把头发拉出来,任何帮助都将不胜感激。
AES( 高级加密标准 )实际上是三个相关分组密码算法(或算法对,如果单独计算加密和解密)的集合。 它们都在128位块(16字节)上工作。
最常用的是AES-128,它采用128位密钥(即16字节)。 AES-192采用192位密钥(24字节),AES-256采用256位密钥(32字节)。
这三种算法的工作方式类似,但仍然不同(较长的密钥需要更长的时间,因为它们会对内部混淆操作进行更多的“回合”,因此密钥的所有位都可能以某种方式影响密文的所有位)。 因此,所有这些算法的所有这些密钥都以不同方式加密和解密(即没有AES-256密钥与AES-128密钥完全相同)。
也就是说,遗憾的是,我不知道CommonCrypto库是否支持AES的所有变体,如果是(我想的话),如何选择正确的。
保罗解释非常好! 并且比关于这个主题的Apple文档要好得多;-)
现在把这些知识放在iOS上下文中……你需要知道cccrypt (就像在man page中命名的)通常在网站的其他地方命名为CommonCrypto (可以方便你的搜索)。
然而,在你意识到这部分是开源软件并且缺乏文档之前你不会发现太多。
但是一旦你找到了这个,你可以通过源代码搜索找到CommonCrypto.h并发现你可以使用的枚举,其中包括: kCCKeySizeAES128 , kCCKeySizeAES192和kCCKeySizeAES256 – 所以,你可以在iOS上使用带有AES的256位密钥。