gpt4 book ai didi

java - 为 AES 生成 key

转载 作者:行者123 更新时间:2023-11-29 06:36:13 25 4
gpt4 key购买 nike

我在网上找到了这个:http://www.code2learn.com/2011/06/encryption-and-decryption-of-data-using.html

基本上,我想做的不是像

那样设置 key
  new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't',
'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };

我希望它是随机的(但必须是 16 个字节),并且可以访问它(将其打印在屏幕上)。另外,有没有办法将其设置为字符串,而不是字节类型?

最佳答案

强 AES key 的长度为 16、24 或 32 个字节。如果将 key 限制为映射到可打印 US-ASCII 字符的字节,则 key 将比预期的弱,因为它的范围是有限的(大约 100 位,而不是 128 位——弱了数百万倍)。最好使用十六进制、base-64 或 base-85 等编码将 key 表示为文本;当然,这些表示会更长。

要创建安全 key ,请使用 KeyGenerator基于适当种子的加密随机数生成器;如果您不指定,提供商将选择他们自己的 RNG:

KeyGenerator gen = KeyGenerator.getInstance("AES");
gen.init(128); /* 128-bit AES */
SecretKey secret = gen.generateKey();
byte[] binary = secret.getEncoded();
String text = String.format("%032X", new BigInteger(+1, binary));
System.out.println(text);

如果需要,您可以实例化您自己的 SecureRandom 实例,使用您首选的算法和提供程序,并通过重载 init() 将其传递给 key 生成器。方法。

有一些 key 派生方法试图减轻基于密码的 key 的弱点,但基于密码的 key 总是更可预测。

关于java - 为 AES 生成 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204491/

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