gpt4 book ai didi

java - 从哪里可以获得 AES key 计划加密 key ?

转载 作者:行者123 更新时间:2023-11-30 03:30:26 25 4
gpt4 key购买 nike

我已经在 J​​ava 中实现了 AES key 计划,但有一件事我感到困惑。在维基百科(http://en.wikipedia.org/wiki/Rijndael_key_schedule#Key_schedule_description)中它说:

The first n bytes of the expanded key are simply the encryption key.

这个“加密 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;
}

我也想打印这个 key ,但是因为java只有带符号的字节,如果我使用大于127(当前是255)的数字,我将得到负数,这些负数无法使用这样的东西正确地在字符串中表示其中,outputbyte 是 byte[],并将整数转换为字节并存储在其中:

String output = new String(outputbyte, StandardCharsets.UTF_8);

使用 127 可以接受吗?

最佳答案

Where does this "encryption key" come from?

这是用户需要加密时提供的 key 。

Is it generated randomly and if so what constraints you should generate it with etc?

它可能是随机生成的。接下来的挑战就是让对方知道。例如,可以发送通过公钥加密加密的 key 。这称为hybrid encryption.

通常使用 key 交换协议(protocol)(例如 Diffie-Hellman)来协商 secret ,而无需通过网络将其完全组装在一起发送。这实现了前向保密,因为各方都会自行计算 key 。

Is using 127 instead acceptable?

不,不是,因为你把整件事都做错了。字节 0x00 到 0x1F 不是可打印字符。因此,当您尝试打印这些字节时,即使字节域减少到 127,您也不会看到实际的 key 。此外,通过限制域,您还可以帮助攻击者,因为现在他们不需要暴力破解 key 的每个字节的完整域。

生成随 secret 钥时需要利用 key 字节的全部容量。当您想查看 key 时,可以使用Base 64对其进行编码或Hex .

关于java - 从哪里可以获得 AES key 计划加密 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29177364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com