Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加密和Java,生成密钥的方法-大小是多少?_Java_Encryption_Size_Key - Fatal编程技术网

加密和Java,生成密钥的方法-大小是多少?

加密和Java,生成密钥的方法-大小是多少?,java,encryption,size,key,Java,Encryption,Size,Key,我使用以下方法体生成加密密钥: new BigInteger(500, new SecureRandom()).toString(64); 有人能解释一下生成的密钥的大小吗?在您的情况下,这是一个长度为500位的安全随机数。请看一下BigInteger(int numBits,Random rnd)构造函数的javadoc。您的代码行创建了一个500位整数,并显然试图将其转换为Base64中的字符串-这就是toString()调用。但这是行不通的,因为它只适用于以36为基数,否则默认为十进制。

我使用以下方法体生成加密密钥:

new BigInteger(500, new SecureRandom()).toString(64);

有人能解释一下生成的密钥的大小吗?

在您的情况下,这是一个长度为500位的安全随机数。请看一下BigInteger(int numBits,Random rnd)构造函数的javadoc。

您的代码行创建了一个500位整数,并显然试图将其转换为Base64中的字符串-这就是
toString()
调用。但这是行不通的,因为它只适用于以36为基数,否则默认为十进制。如果需要Base64表示,则必须使用第三方类,因为标准API中没有Base64编码器。

通常,您希望加密密钥为2的幂。所以,也许您的意思是512位?

首先,正如其他建议一样,您将得到IllegalArgumentException,因为BigInteger不支持基数64

即使使用有效的基数,生成的字符数也会有所不同,因为BigInteger会去掉前导0,并且字符串中可能会出现减号

要获取随机密钥,只需直接使用随机字节。假设您想要128位(16字节)AES密钥,只需执行此操作

  byte[] keyBytes = new byte[16];
  new SecureRandom().nextBytes(keyBytes);
  SecretKey aesKey = new SecretKeySpec(keyBytes, "AES");

应该是:new BigInteger(500,new SecureRandom()).toString(64)。假设我想要密钥大小128,它应该是:new BigInteger(128,new SecureRandom()).toString(32)?添加toString方法的原因是什么?第一:是的。方法将数字转换为字符串。我会选择“toString(16)”表示十六进制,或者选择“toString()”表示字符串中的十进制数。谢谢您的回复。这个呢:新的BigInteger(128,new SecureRandom())。toString(32)是的,尽管它将以32为基数表示它-这可能不是您想要的。这取决于要使用密钥的API,以及它需要密钥的格式。出现了一个错误,例如:new BigInteger(256,new SecureRandom())。toString(32)-在这种情况下添加“toString(32)”的目的是什么?