- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对为什么在生成 key 加密时需要指定算法(例如“AES”)感到困惑,例如...
KeyGenerator kg = KeyGenerator.getInstance("AES");
它显然不用于指定 key 的大小,因为 AES key 可以是 128、192 或 256 位。该部分将通过 init() 完成...
kg.init(256, new SecureRandom());
SecretKey key = kg.generateKey();
就其值(value)而言,上面的示例代码是从 http://android-developers.blogspot.de/2013/02/using-cryptography-to-store-credentials.html 借来的
此外,NIST FIPS-197 声明...
No weak or semi-weak keys have been identified for the AES algorithm, and there is no restriction on key selection.
...所以这让我相信 任何 128、192 或 256 位都可以用作 key 。
很明显,当我得到一个密码实例时指定“AES”,例如......
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
...必须指明要使用的密码算法。我只是不明白为 key 生成指定它的目的是什么。
谢谢。
最佳答案
如评论中所述,除 AES 之外的其他 key 可能需要更多关注。最好有 DES 和 AES 的对称方法,以便您可以在算法之间切换。
此外,并非所有加密提供程序都可以在内存中创建 key 。 Java JCA 还与硬件 keystore 兼容。对于 PKCS#11 提供程序(例如),需要在生成 key 时知道 key 的类型。
关于java - 将 "AES"指定为 KeyGenerator.getInstance() 中的算法究竟有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24130154/
我是一名优秀的程序员,十分优秀!