AES-256和初始化向量加密
我有一个关于在AES加密中使用初始化向量的问题。我引用以下文章/帖子将加密功能构建到程序中:
[1] 基于Java256位AES密码的加密
[2]http://gmailassistant.sourceforge.net/src/org/freeshell/zs/common/Encryptor.java.html
我最初从第一个链接开始关注erickson的解决方案,但是据我所知,我的实现不支持PBKDF2WithHmacSHA1。因此,我转向第二个链接,以了解自己的迭代SHA-256哈希创建的想法。
我的问题是如何创建IV。一个实现([1])使用Cypher类中的方法来导出IV,另一个实现[[2])使用哈希的后16个字节作为IV。简而言之,为什么从安全角度来看,两者之间的差异和哪个更好?我也对IV的派生和使用感到困惑(我了解它们的用途,但不是微妙的区别),因此也欢迎进行任何澄清。
我注意到第二个链接使用的是AES-128而不是AES-256,这向我暗示,如果我想使用此方法,则必须升级到SHA-512。这似乎是一个不幸的要求,因为用户的密码必须长16个字符才能确保远程安全的哈希,并且此应用程序将用于手机。
来源可根据要求提供,但仍不完整。
先感谢您。
回答:
IV不应仅由密码生成。
IV的观点是,即使使用相同的密钥和明文,也要重复使用,否则会产生不同的密文。如果IV仅由密码确定地生成,则每次都会获得相同的密文。在引用的示例中, 盐
是随机选择的,因此即使使用相同的密码也会生成新的密钥。
只需使用随机数生成器选择IV。这就是密码在内部执行的操作。
我想强调的是,您必须将IV(如果使用第一种方法)或盐(如果使用第二种方法)与密文一起存储。如果一切都源自密码,您将没有良好的安全性;您需要在每条消息中都随机一些。
以上是 AES-256和初始化向量加密 的全部内容, 来源链接: utcz.com/qa/430394.html