Java 从哪里获取AES密钥计划加密密钥?
我已经用Java实现了AES密钥调度,但有一件事我感到困惑。在维基百科()中,它说: 扩展密钥的前n个字节只是加密密钥 这个“加密密钥”来自哪里?它是随机生成的吗?如果是,您应该使用什么约束生成它 目前我有一个方法,它只生成一个16字节的随机数组:Java 从哪里获取AES密钥计划加密密钥?,java,aes,schedule,rijndael,symmetric-key,Java,Aes,Schedule,Rijndael,Symmetric Key,我已经用Java实现了AES密钥调度,但有一件事我感到困惑。在维基百科()中,它说: 扩展密钥的前n个字节只是加密密钥 这个“加密密钥”来自哪里?它是随机生成的吗?如果是,您应该使用什么约束生成它 目前我有一个方法,它只生成一个16字节的随机数组: public int[][] initvec() { int[][] key = new int[4][Nk]; for (int i = 0; i < 4; i++) { for (int j = 0; j &
public int[][] initvec() {
int[][] key = new int[4][Nk];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < Nk; j++) {
key[i][j] = mrnd.nextInt(255) % (0xff + 1);
int keyval = key[i][j];
// System.out.printf("%x,",keyval);
}
// System.out.println("");
}
return key;
}
使用127是否可以接受
这个“加密密钥”来自哪里
它是用户在需要加密时提供的密钥
它是随机生成的吗?如果是,您应该使用什么约束生成它
它可以随机生成。那么,挑战就是让对方知道。例如,可以通过公钥加密发送加密的密钥。这叫做
通常使用Diffie-Hellman之类的密钥交换协议来协商秘密,而无需将其完全组装在电线上发送。这实现了前向保密,因为各方将自己计算密钥
使用127是否可以接受
不,不是,因为你做错了整件事。字节0x00到0x1F不是可打印字符。因此,当您尝试打印这些字节时,即使缩减的字节域高达127,您也看不到实际的密钥。此外,通过限制域,您还可以帮助攻击者,因为现在他们不需要对密钥的每个字节强制整个域
生成随机密钥时,需要利用密钥字节的全部容量。当您想要查看密钥时,可以使用或对其进行编码。
key[i][j]=mrnd.nextInt(255)%(0xff+1)代码>?您在其中使用了很多255,但仍将其排除在外。它可能不再觉得被需要了。
String output = new String(outputbyte, StandardCharsets.UTF_8);