我正在使用 MATLAB 实现三鱼分组密码。起初,我在 uint8 数字上实现了算法来验证我的代码。一切正常,解密成功。但是当我将数字替换为 uint64 时,纯文本没有正确检索。
我一遍又一遍地追踪查房结果寻找原因,但至今找不到。加密和解密的前四位是有区别的,即沿x轮加密为9824265115183455531,但解密为9824265115183455488。
我认为这种差异背后的原因在于函数 AddMod64 和 SubMod64 找到算术模 2 的 64 次幂。但到目前为止我真的无法修复它。
我知道
double(2^64) = 18446744073709552000
和
uint64(2^64) = 18446744073709551615 % z = ( x + y ) % 2^64
function z = AddMod64(x , y)
m = uint64(2^64);
z = double(mod(mod(double(x),m)+mod(double(y),m),m));
end
% z = (x - y ) % 2^64
function z = SubMod64(x , y)
m = uint64(2^64);
z = double(mod(mod(double(x),m) - mod(double(y),m),m));
end