我有一个关于在AES加密中使用初始化向量(IV)的问题。我正在参考以下文章/帖子来将加密集成到我的程序中:
[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个字符,而这个应用程序是为手机设计的。
源代码可根据请求提供,但它还没有完成。
预先感谢你。