我试图在java中实现Speck 64位块/128位密钥密码。我被加密/解密算法困住了。我的解密算法不能正确地解密文本。
我的实施:
x和y由函数装箱初始化(<-有点奇怪):
x = boxing(plainText, 0, 1);
y = boxing(plainText, 1, 2);
public static int boxing(int[] content, int i, int count) {
int temp[] = new int[count];
temp[i] |= content[i*4] & 0xff;
temp[i] = temp[i] << 8 | content[i*4+1] & 0xff;
temp[i] = temp[i] << 8 | content[i*4+2] & 0xff;
temp[i] = temp[i] << 8 | content[i*4+3] & 0xff;
//System.out.println(temp[from]);
return temp[i];
}注意,content是由8个字符组成的int数组。
我把解密放在加密之后,这样我就可以看到这个算法是否真的有效,但它不是,我也不知道为什么。(在使用解密之前,我将变量重置为它们的适当值)。
参考资料
编辑:
发布于 2015-05-04 21:15:39
终于弄明白了。我的解密算法应该如下所示:
for(int i = T-1; i >= 0; i--) {
y = rotateRight(x ^ y, beta);
x = rotateLeft((x ^ k[i]) - y, alpha);
}并在加密算法中意外地交换旋转函数。这是正确的表格:
for(int i = 0; i < T; i++) {
x = (rotateRight(x, alpha) + y) ^ k[i];
y = rotateLeft(y, beta) ^ x;
}https://stackoverflow.com/questions/29950555
复制相似问题