【发布时间】:2010-12-22 07:13:37
【问题描述】:
我有一个关于在 AES 加密中使用初始化向量的问题。我正在参考以下文章/帖子以在我的程序中构建加密:
[1]Java 256-bit AES Password-Based Encryption
[2]http://gmailassistant.sourceforge.net/src/org/freeshell/zs/common/Encryptor.java.html
我最初从第一个链接开始关注埃里克森的解决方案,但据我所知,我的实现不支持 PBKDF2WithHmacSHA1。因此,我转向第二个链接以了解我自己的迭代 SHA-256 哈希创建的想法。
我的问题在于 IV 是如何创建的。一种实现 ([1]) 使用来自 Cypher 类的方法来派生 IV,而另一种实现 ([2]) 使用散列的第二个 16 字节作为 IV。很简单,为什么会有区别,从安全角度来看哪个更好?我对 IV 的推导和使用也有点困惑(我了解它们的用途,只是不了解细微的差异),因此也非常欢迎任何澄清。
我注意到第二个链接使用的是 AES-128 而不是 AES-256,这表明如果我想使用这种方法,我必须升级到 SHA-512。这似乎是一个不幸的要求,因为用户的密码必须长 16 个字符才能确保远程安全散列,而且这个应用程序是为手机而设计的。
来源可应要求提供,但仍不完整。
提前谢谢你。
【问题讨论】:
-
值得在stackoverflow.com/questions/14937707/… 抢夺。它说在加密期间设置
IV。
标签: java android encryption aes