Java 在指定范围内生成SecretKeySpec密钥
我需要在指定的范围内用Java生成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) 该构造函数需要
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是的,很好。我已经改正了上面的例子。