gpt4 book ai didi

java - 使用 AES-256 和初始化 vector 进行加密

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:46 25 4
gpt4 key购买 nike

我有一个关于在 AES 加密中使用初始化 vector 的问题。我引用了以下文章/帖子以在我的程序中构建加密:

[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 个字符才能确保远程安全哈希,而且此应用程序是为手机设计的。

来源可应要求提供,但仍不完整。

提前谢谢你。

最佳答案

不应单独从密码生成 IV。

IV 的要点是即使重复使用相同的 key 和明文,也会产生不同的密文。如果 IV 是确定性地仅从密码生成的,那么您每次都会得到相同的密文。在引用的示例中,salt 是随机选择的,因此即使使用相同的密码也会生成一个新 key 。

只需使用随机数生成器来选择 IV。这就是密码在内部所做的事情。


我想强调的是,您必须将 IV(如果您使用第一种方法)或盐(如果您使用第二种方法)与密文一起存储。如果一切都来自密码,您将不会有很好的安全性;每条消息都需要一些随机性。

关于java - 使用 AES-256 和初始化 vector 进行加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com