Java 生成具有给定长度且包含a-Z0-9的AES密钥
是否可以使用AES创建一个具有给定长度且仅应包含0-9a-Z的密钥 我只需要一个32个字符的密钥作为SecretKey规范:(用于AES256加密/解密选项) 是否可以使用AES创建一个具有给定长度且仅应包含0-9a-Z的密钥 它是。通过生成AES密钥值,然后确保每个字符的ascii值在Java 生成具有给定长度且包含a-Z0-9的AES密钥,java,encryption,aes,Java,Encryption,Aes,是否可以使用AES创建一个具有给定长度且仅应包含0-9a-Z的密钥 我只需要一个32个字符的密钥作为SecretKey规范:(用于AES256加密/解密选项) 是否可以使用AES创建一个具有给定长度且仅应包含0-9a-Z的密钥 它是。通过生成AES密钥值,然后确保每个字符的ascii值在0-8(48-57)或a-z(97-122)的范围内。如果不在范围内,只需将该值设置为在范围内即可 但是.. 这会使密钥变得非常不安全。通过对值进行如此严格的限制,实际上是在限制可能的组合数量。而通常情况下,可能
0-8(48-57)
或a-z(97-122)
的范围内。如果不在范围内,只需将该值设置为在范围内即可
但是..
这会使密钥变得非常不安全。通过对值进行如此严格的限制,实际上是在限制可能的组合数量。而通常情况下,可能的组合是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;
用于小于所需值的任何值。
将值舍入到所需值。
设期望值=100;
设任意值=50;
50 --> 100;
设任意值=60;
60 --> 100;
在这一点上
A通常从测试aaaa…x 256
开始。然后(aaaa x 255)1
。我的意思是,蛮力通常从字母数字字符开始。你只是让你的钥匙在那里破裂
在这一点上。。
AES密钥定义为128、192或256
位。这是标准。您不能更改长度。您可以做的是查看,这是AES成为标准之前的情况。这可以接受更大范围的键值
说到这里
AES密钥是由密钥计划生成的,其生成方式是有原因的。AES密钥的设计目的是以加密方式抵抗密码分析。如果弄乱了这一点,则会危及整个算法的安全性,因此,当您要弄乱输出时,实现加密标准是毫无意义的
我找不到更大的字体
您希望输出长度为32个字符。在ASCII中,这意味着每个字符8位
。或者32 x 8=256
。AES建议的模式是256位
,因此您很幸运。您可以使用哈希算法生成应在a-z0-9
范围内的值
是否可以使用AES创建一个具有给定长度且仅应包含0-9a-Z的密钥
它是。通过生成AES密钥值,然后确保每个字符的ascii值在0-8(48-57)
或a-z(97-122)
的范围内。如果不在范围内,只需将该值设置为在范围内即可
但是..
这会使密钥变得非常不安全。通过对值进行如此严格的限制,实际上是在限制可能的组合数量。而通常情况下,可能的组合是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;
用于小于所需值的任何值。
将值舍入到所需值。
设期望值=100;
设任意值=50;
50 --> 100;
设任意值=60;
60 --> 100;
在这一点上
A通常从测试aaaa…x 256
开始。然后(aaaa x 255)1
。我的意思是,蛮力通常从字母数字字符开始。你只是让你的钥匙在那里破裂
在这一点上。。
AES密钥定义为128、192或256
位。这是标准。您不能更改长度。您可以做的是查看,这是AES成为标准之前的情况。这可以接受更大范围的键值
说到这里
AES密钥是由密钥计划生成的,其生成方式是有原因的。AES密钥的设计目的是以加密方式抵抗密码分析。如果弄乱了这一点,则会危及整个算法的安全性,因此,当您要弄乱输出时,实现加密标准是毫无意义的
我找不到更大的字体
您希望输出长度为32个字符。在ASCII中,这意味着每个字符
8位
。或者32 x 8=256
。好吧..AES建议的模式是256位
,所以您很幸运。您可以使用哈希算法,该算法将生成的值应在a-z0-9
的范围内密钥长度为256位,太大,无法存储在32个字符(0-9a-Z)中
但是,如果您通过将字符集扩展为2个字符(总共64个字符)来稍微放宽您的要求,那么您可以在一个字符中存储密钥的6位,这样您就可以在32个字符中存储192位AES密钥
下面的代码将创建192位AES密钥的32字符base64编码字符串(0-9a-Z+/):
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(192);
SecretKey key = keyGen.generateKey();
String keyBase64 = Base64.encode(key.getEncoded());
AES-256
密钥长度为256位,太大,无法存储在32个字符(0-9a-Z)中
但是,如果您通过将字符集扩展为2个字符(总共64个字符)来稍微放宽您的要求,那么您可以在一个字符中存储密钥的6位,这样您就可以在32个字符中存储192位AES密钥
下面的代码将创建192位AES密钥的32字符base64编码字符串(0-9a-Z+/):
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(192);
SecretKey key = keyGen.generateKey();
String keyBase64 = Base64.encode(key.getEncoded());
我将生成一个
floor(n*5.95419)-6的键