pho*_*594 10 java encryption android aes
我有一个关于在AES加密中使用初始化向量的问题.我正在引用以下文章/帖子来为我的程序构建加密:
[1] Java 256位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个字符才能确保远程安全哈希并且这个应用程序的目的地是手机.
可根据要求提供来源,但仍未完整.
先感谢您.
eri*_*son 28
不应仅从密码生成IV.
即使使用相同的密钥和明文重新使用IV的点,也将产生不同的密文.如果仅通过密码确定性地生成IV,则每次都会得到相同的密文.在引用的示例中,随机选择了salt,因此即使使用相同的密码也会生成新密钥.
只需使用随机数生成器来选择IV.这就是密码在内部的作用.
我想强调你必须将IV(如果使用第一种方法)或盐(如果使用第二种方法)与密文一起存储.如果一切都来自密码,您将无法获得良好的安全性; 你需要在每条消息中都有一些随机性.
| 归档时间: |
|
| 查看次数: |
40152 次 |
| 最近记录: |