0

我正在使用 Bruce Schneier 的源代码使用 Blowfish 加密一些数据。一切似乎都很好,只是我注意到当我使用 8 字节密钥进行加密时,可以使用该 8 字节密钥的第一个字符对其进行解密(例如,使用密钥“abcdefgh”加密,并且可以使用“a”进行解密) )。

以下是我的代码中的一些摘录:

初始化河豚:

char key[] = "abcdefgh";
InitializeBlowfish(key, 1);

然后我将输入以 8 字节块的形式存储到两个联合中,每个联合有四个字符和一个无符号长整数。

然后我加密:

Blowfish_encipher(&(xl.l), &(xr.l));

其中 xl.l 和 xr.l 在我的两个联合 xl 和 xr 中都是无符号长整数。

解密:

Blowfish_decipher(&(xl.l), &(xr.l));

请注意,如果密钥是随机的,它不会解密,只有当它是正确的密钥或它的第一个字节时。

到底是怎么回事?!

谢谢你的帮助。

4

1 回答 1

4

我可以找到的河豚源代码链接 往往表明该InitializeBlowfish函数的定义如下:

int InitializeBlowfish(char *key, size_t len)

并且可以用例如调用:

InitializeBlowfish(key_string_blowfish, strlen(key_string_blowfish));

而不是在您的情况下,您指示密钥长度为 1。

于 2011-06-20T08:40:07.973 回答