Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 在指定范围内生成SecretKeySpec密钥_Java_Cryptography_Bytearray_Des - Fatal编程技术网

Java 在指定范围内生成SecretKeySpec密钥

Java 在指定范围内生成SecretKeySpec密钥,java,cryptography,bytearray,des,Java,Cryptography,Bytearray,Des,我需要在指定的范围内用Java生成SecretKeySpec。e、 我需要所有16位的钥匙。因为我需要DES的密钥,所以密钥长度必须是8字节。这意味着,最高的6个字节是0,最低的两个字节是存储从1到2^16-1的数字。在过去的一个小时里,我读了很多关于位、字节和十六进制数的书,我真的对这些东西感到困惑。我想使用的SecretKeySpec构造函数是: public SecretKeySpec(byte[] key, String algorithm) 该构造函数需要

我需要在指定的范围内用Java生成
SecretKeySpec
。e、 我需要所有16位的钥匙。因为我需要DES的密钥,所以密钥长度必须是8字节。这意味着,最高的6个字节是0,最低的两个字节是存储从1到2^16-1的数字。在过去的一个小时里,我读了很多关于位、字节和十六进制数的书,我真的对这些东西感到困惑。我想使用的
SecretKeySpec
构造函数是:

 public SecretKeySpec(byte[] key,
             String algorithm)
该构造函数需要一个字节数组作为键。我想要创建那些2^16-1字节数组的方法是用适当的数字填充最低的两个字节。e、 G

  • 键0:键[7]=0,键[6]=0,键[0]=0
  • 键1:键[7]=0,键[6]=0,键[1]=0,键[0]=1

我会使用循环来填充字节数组。这就是我处理这个问题的方法吗?

字节数组默认为包含值为零的内容。所以你可以做:

byte[] myVeryWeakKey = new byte[8];
byte[6] = // whatever
byte[7] = //whatever
或者您想随机分配最后两个字节

byte[] keybits = new byte[2];
Random r = new Random();
r.nextBytes(keybits);

System.arraycopy(keybits, 0, myVeryWeakKey, 6, 2);
我希望不用说,这些钥匙会少得可怜。如此之弱,你根本不需要麻烦任何加密。(这就是为什么我甚至懒得建议
SecureRandom

如果您需要创建所有可能的值,则以下类似操作将起作用:

List<byte[]> keys = new ArrayList<>();

for (int b = -128; b <= 127; b++) {
  for (int c = -128; c <= 127; c++) {
    byte[] newValue = new byte[8];
    newValue[6] = (byte) b;
    newValue[7] = (byte) c;
    keys.add(newValue);
  } 
}
List key=new ArrayList();

对于(int b=-128;b)谢谢你的回答。由于第二个循环是无限循环,因此此代码将永久运行。当c达到127时,它将在循环体之后递增,这将导致c=-128。无论如何,谢谢,这是correctable@user3005306是的,很好。我已经改正了上面的例子。