gpt4 book ai didi

java - 56 位 DES 被填充为 64 位,导致一字节解密不足

转载 作者:行者123 更新时间:2023-12-02 02:58:32 25 4
gpt4 key购买 nike

我有这个问题。我获得了使用 56 位 key 和 64 位输入 block 大小的 DES 加密。

block 大小为 8 个字节,我成功解密了前 7 个字节。然而,对于最后一个字节,DES 是 56 位,它被填充为 64 位,因此我的解密消息缺少一个字节。

当我到达第七个循环时,明文 1 已经为空,因此我缺少一个字节。

有什么办法可以解决这个问题吗?

编辑

String plaintext1 = "ZZZZZZZ";
//removed line
System.out.println(Arrays.toString(plaintext1 .getBytes()));
System.out.println(plaintext1 );

public static byte[] paddingBytes(byte[] input, int blockSize) {
int paddingSize = (blockSize - (input.length % blockSize)) % blockSize;
byte[] padding = new byte[paddingSize];
return concat(input, padding);
}

最佳答案

DES 有一个 56 位 key ,编码为 8 个字节,每个字节的最低有效位可用于验证每个字节的奇偶校验,但密码本身不使用它。

DES 是一种面向 block 的加密方法,因此输入数据需要是 block 大小的精确倍数:8 字节。如果输入数据大小不是精确倍数,则必须对其进行填充。如果需要填充,则必须在加密之前附加它,并在解密之后删除它。通常的填充是 PKCS#5 。通常可以为使用 ECB 或 CBC 操作模式的分组密码配置填充模式。

当无法计算明文大小并且最后一个字节可以具有任何值时,则始终需要应用填充。即使输入大小是 block 大小的精确倍数也是如此。否则解密后无法判断最后一个字节是填充还是明文。

关于java - 56 位 DES 被填充为 64 位,导致一字节解密不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722016/

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