我正在使用 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));
请注意,如果密钥是随机的,它不会解密,只有当它是正确的密钥或它的第一个字节时。
到底是怎么回事?!
谢谢你的帮助。