我从哪里获得 AES Key Schedule 加密密钥?
Where do I get AES Key Schedule encryption key?
我已经在 Java 中实施了 AES 密钥计划,但有一件事让我感到困惑。在维基百科 (http://en.wikipedia.org/wiki/Rijndael_key_schedule#Key_schedule_description) 中它说:
The first n bytes of the expanded key are simply the encryption key.
这个"encryption key"从哪里来的?它是随机生成的吗?如果是,您应该使用哪些约束来生成它?
目前我有一个方法可以生成一个 16 字节的随机数组:
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;
}
我也想打印这个密钥,但是因为 java 只有带符号的字节,如果我使用大于 127(当前为 255)的数字,我将得到负数,不能用正确使用类似这样的字符串,其中 outputbyte 是 byte[] 并将整数转换为字节并存储在其中:
String output = new String(outputbyte, StandardCharsets.UTF_8);
使用 127 可以吗?
Where does this "encryption key" come from?
这是用户在需要加密时提供的密钥。
Is it generated randomly and if so what constraints you should generate it with etc?
可能是随机生成的。那么挑战就是让对方知道。例如,可以发送通过 public-key crypto 加密的密钥。这叫做hybrid encryption.
通常使用 Diffie-Hellman 等密钥交换协议来协商秘密,而无需通过网络将其完全组装发送。这样就实现了前向保密,因为每一方都会自己计算秘钥。
Is using 127 instead acceptable?
不,不是,因为你做错了整件事。字节 0x00 到 0x1F 不是可打印字符。因此,当您尝试打印这些字节时,即使使用最多 127 个减少的字节域,您也看不到实际的密钥。此外,通过限制域,您还可以帮助攻击者,因为现在他们不需要为密钥的每个字节强制执行完整的域。
生成随机密钥时需要利用密钥字节的全部容量。当您想要查看密钥时,可以使用 Base 64 or Hex.
对其进行编码
我已经在 Java 中实施了 AES 密钥计划,但有一件事让我感到困惑。在维基百科 (http://en.wikipedia.org/wiki/Rijndael_key_schedule#Key_schedule_description) 中它说:
The first n bytes of the expanded key are simply the encryption key.
这个"encryption key"从哪里来的?它是随机生成的吗?如果是,您应该使用哪些约束来生成它?
目前我有一个方法可以生成一个 16 字节的随机数组:
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;
}
我也想打印这个密钥,但是因为 java 只有带符号的字节,如果我使用大于 127(当前为 255)的数字,我将得到负数,不能用正确使用类似这样的字符串,其中 outputbyte 是 byte[] 并将整数转换为字节并存储在其中:
String output = new String(outputbyte, StandardCharsets.UTF_8);
使用 127 可以吗?
Where does this "encryption key" come from?
这是用户在需要加密时提供的密钥。
Is it generated randomly and if so what constraints you should generate it with etc?
可能是随机生成的。那么挑战就是让对方知道。例如,可以发送通过 public-key crypto 加密的密钥。这叫做hybrid encryption.
通常使用 Diffie-Hellman 等密钥交换协议来协商秘密,而无需通过网络将其完全组装发送。这样就实现了前向保密,因为每一方都会自己计算秘钥。
Is using 127 instead acceptable?
不,不是,因为你做错了整件事。字节 0x00 到 0x1F 不是可打印字符。因此,当您尝试打印这些字节时,即使使用最多 127 个减少的字节域,您也看不到实际的密钥。此外,通过限制域,您还可以帮助攻击者,因为现在他们不需要为密钥的每个字节强制执行完整的域。
生成随机密钥时需要利用密钥字节的全部容量。当您想要查看密钥时,可以使用 Base 64 or Hex.
对其进行编码