java - 生成给定长度的 AES key ,其中包含 a-Z0-9

标签 java encryption aes

是否可以使用 AES 创建一个给定长度的 key ,并且它应该仅包含 0-9a-Z?

我只需要一个 32 个字符的 key 作为 SecretKey 规范 :( 用于 AES256 加密/解密

最佳答案

is it possible to create a secret key using AES but with a given length and it should cointain only 0-9a-Z?

是的。通过生成 AES key 值,然后确保每个字符的 ascii 值在 0-8 (48 - 57)a-z (97-122)< 范围内.. 如果不是,只需将值修改为在范围内即可。

但是..

这会导致 key 极其不安全。通过如此严格地限制你的值,你实际上限制了可能的组合的数量。通常情况下,有 2^256 种可能的组合(此时被认为是安全的),但您将其减少到更少的可能组合...这是不安全的。

此外,我建议的上述算法会产生大量重复值。您将比较差异,然后修正直到差异为 0.. 这意味着:

For any value < the desired value.
     round value to desired value.
     Let desired value = 100;
     Let any value = 50;
     50 --> 100;
     Let any value = 60;
     60 --> 100;

最重要的是..

一个Brute Force Attack通常会从测试 aaaa... x 256 开始。然后(aaaa x 255) 1。我的意思是,暴力通常以字母数字字符开头。你只是让你的 key 准备好破解。

除此之外..

AES key 定义为 128、192 或 256 位。这就是标准。你无法改变长度。您可以做的是查看 Rijndael ,这就是 AES 在成为标准之前的情况。这可以接受更广泛的键值。

以及最重要的

AES key 是由 key 计划生成的,这种方式是有原因的。它设计是为了在密码学上抵抗密码分析。通过搞乱它,你会危及整个算法的安全性,从而当你要搞乱输出时,实现加密标准变得毫无意义。

我找不到更大的字体

您希望输出的长度为 32 个字符。在 ASCII 中,这意味着每个字符 8 位。或32 x 8 = 256。嗯.. AES 的推荐模式是256 位,所以你很幸运。您可以使用哈希算法来生成应在 a-z0-9 范围内的值。

关于java - 生成给定长度的 AES key ,其中包含 a-Z0-9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120567/

相关文章:

java - 使用 iText 5 出现奇怪的显示问题

asp.net - 是否可以加密从 web.config 指定为 configSource 的配置文件?

java - 使用网络代理 (nanoHTTPD) 动态传输[随机访问]加密 (AES-CTR) 视频

javascript - 相同的正则表达式在 Java 和 JavaScript 中有不同的结果

java - Eclipse 和 Gradle 的包和 HTML 编辑器问题

java - 根据行和列绘制一条线

authentication - 为什么 JSON Web 加密 (JWE) 不完整性保护 IV 和内容加密 key ?

rest - Restful 服务上的数据加密

java - java中的AES解密错误

c# - 用 PHP 重写 Rijndael 256 C# 加密代码