首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XTEA加密功能的类型

使用XTEA加密功能的类型
EN

Stack Overflow用户
提问于 2012-03-30 17:35:00
回答 1查看 943关注 0票数 1

我对密码学很感兴趣,因为我也喜欢编程,所以我决定用XTEA加密算法编写一个小程序来加密文件。我受到了维基百科的启发,所以我编写了这个函数来进行加密(为了节省空间,我不会发布解密功能,因为它几乎是一样的):

代码语言:javascript
复制
void encipher(long *v, long *k)
{
    long v0 = v[0], v1 = v[1];
    long sum = 0;   
    long  delta = 0x9e3779b9;
    short rounds = 32;
    for(uint32 i = 0; i<rounds; i++)
    {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
      sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
    }
    v[0] = v1;
    v[1] = v1;
}

现在,当我想使用它时,我编写了以下代码:

代码语言:javascript
复制
long data[2]; // v0 and v1, 64bits
data[0] = 1;
data[1] = 1;

long key[4]; // 4 * 4 bytes = 16bytes = 128bits
*key = 123; // sets the key

cout << "READ: \t\t" << data[0] << endl << "\t\t" <<  data[1] << endl;
encipher(data, key);
cout << "ENCIPHERED: \t" << data[0] << endl << "\t\t" << data[1] << endl;

decipher(data, key);
cout << "DECIPHERED: \t" << data[0] << endl <<  "\t\t" <<  data[1] << endl;

我总是得到运行时崩溃或错误的破译文本:

我确实了解这个程序的基本知识,但我不知道我的代码有什么问题。为什么加密的数据和数据1是相同的?为什么破译的数据与原始数据完全不同?我用错类型了吗?我希望你能帮我解决我的问题:)

  • 1月
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-30 17:53:07

问题在于:

代码语言:javascript
复制
v[0] = v1; // should be v[0] = v0
v[1] = v1;

另外,您只设置键的前4个字节。其余12个字节未初始化。试着做这样的事情:

代码语言:javascript
复制
key[0] = 0x12345678;
key[1] = 0x90ABCDEF;
key[2] = 0xFEDCBA09;
key[3] = 0x87654321;

固定码为我提供了以下输出:

代码语言:javascript
复制
READ:           1
                1
ENCIPHERED:     -303182565
                -1255815002
DECIPHERED:     1
                1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9947780

复制
相关文章

相似问题

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