首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Speck算法无效

Speck算法无效
EN

Stack Overflow用户
提问于 2015-04-29 17:27:28
回答 1查看 1.3K关注 0票数 3

我试图在java中实现Speck 64位块/128位密钥密码。我被加密/解密算法困住了。我的解密算法不能正确地解密文本。

我的实施:

  • 加密: int[] l=新int 2*T,k=新intT;/*键扩展*键扩展*为( int i= 0;i< T-1;( i++) { li+m-1 = (ki + rotateRight(li,alpha) ^ i;ki+1 = rotateLeft(ki,beta) ^ li+m-1;//System.out.println(ki);} /*加密**加密*i++*{x= (rotateLeft(x,alpha)+ y) ^ ki;Y= rotateRight(y,β)^ x;//System.out.println(y);}
  • 解密: /* i++(int i= 0;i< T-1;i++) { li+m-1 = (ki + rotateRight(li,alpha)) ^ i;ki+1 = rotateLeft(ki,β)^ li+m-1;//System.out.println(ki);} /*解密*

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

代码语言:javascript
复制
    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数组。

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

参考资料

编辑:

  • 轮换职能: 公共静态int rotateLeft(int数,int数量){返回号<<值x号>>> (32次);}公共静态int rotateRight(int数,int值){返回号>>>数量?号<< (32次);}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 21:15:39

终于弄明白了。我的解密算法应该如下所示:

代码语言:javascript
复制
    for(int i = T-1; i >= 0; i--) {
        y = rotateRight(x ^ y, beta);
        x = rotateLeft((x ^ k[i]) - y, alpha);
    }

并在加密算法中意外地交换旋转函数。这是正确的表格:

代码语言:javascript
复制
    for(int i = 0; i < T; i++) {
        x = (rotateRight(x, alpha) + y) ^ k[i];
        y = rotateLeft(y, beta) ^ x;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29950555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档