首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AES解密算法

AES解密算法
EN

Stack Overflow用户
提问于 2010-08-09 01:25:54
回答 1查看 14.5K关注 0票数 10

我要长话短说。有一段时间我想实现我自己的AES加密/解密程序。加密程序进行得很好,没有任何错误或奇怪的输出(因为我已经将我的程序的输出与商业的输出进行了比较,结果是一样的)。

Wikipedia是我在这个实现中的指南,在其中我读到:“一组反向循环被应用于使用相同的加密密钥将密文转换回原始明文。”

我实现了几个模块:

  1. 加圆键
  2. 移位行
  3. 子字节
  4. 混合柱

我还实现了上述模块的两个反向实现:

  1. 反向移位行
  2. 反向Sub
  3. 反混合柱

注意:我没有实现反向圆环密钥,因为它使用加密密钥对纯文本执行XOR,而XOR的反向是XOR本身(如果我错了,请纠正我)

因此,我按与加密相反的顺序插入了这个模块,但一直没有得到纯文本:

代码语言:javascript
复制
expandkey128(key);
rev_subbytes(data);  
rev_shiftrows(data);
addroundkey(data,key,10);

for(int i = 9; i>= 1; i--) { 
    rev_subbytes(data); 
    rev_shiftrows(data);
    rev_mixColum(data);
    addroundkey(data,key,i);
}

addroundkey(data,key,0);

// Please note that I also did from 0 to 10 ,
// instead of 10 to 0 and didn't workout

我还想,也许我不应该实现模块的反向模型,也许我必须用那些我用的模块进行加密,只是顺序相反,你猜怎么着?没有用!:

代码语言:javascript
复制
expandkey128(key);
addroundkey(data,key,0);

for(int i = 1; i<= 9; i++) {
    subbytes(data); 
    shiftrows(data);
    mixColum(data);
    addroundkey(data,key,i);
}

subbytes(data);
shiftrows(data);
addroundkey(data,key,10);

那么问题是:什么是错的?如果你愿意的话,应用这些所谓的模块或函数的正确顺序是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-09 01:49:40

你的操作顺序似乎错了。我想你想要这个:

代码语言:javascript
复制
expandkey128(key);

addroundkey(data,key,10);
rev_shiftrows(data);
rev_subbytes(data); 

for(int i = 9; i>= 1; i--) { 
    addroundkey(data,key,i);
    rev_mixColumn(data);
    rev_shiftrows(data);
    rev_subbytes(data); 
}

addroundkey(data,key,0);

有关更多细节,请参见我对AES的圆柱形解释及其附带的参考实现。

警告:正如第3幕,第2幕中提到的,在编写自己的AES实现以供生产使用时,使用有龙

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3436822

复制
相关文章

相似问题

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