斑点算法不起作用

Speck algorithm not working

我正在尝试在 java 中实现 Speck 64 位块/128 位密钥 密码。我被困在加密/解密算法上。我的解密算法无法正确解密密文。

我的实现:

xy 由函数装箱初始化(<- 有点奇怪):

    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 数组。

我把解密放在加密之后,所以我可以看看这个算法是否真的有效,但它不是,我不知道为什么。 (在使用解密之前,我将变量重置为正确的值)。

参考资料

编辑:

终于想通了。我的解密算法应该是这样的:

    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;
    }