我将简要讲述一个长话短说。我想实现我自己的AES加密/解密程序已经有一段时间了。加密程序进行得很顺利,加密没有任何错误或奇怪的输出(因为我已经比较了我的程序输出和工作广告,结果相同)。AES解密算法
维基百科是我在这个实现中的指导,在这个实现中,我读了“使用相同的加密密钥应用一组反向轮将密文转换回原始明文。”
有几个是我实现的模块:
- 添加轮密钥
- 移行
- 子字节
- 混合列
我还实施了几个反向执行以上模块:
-
个
- 反方向移位行
- 反向子字节
- 反向混合列
注:我并没有实现反向轮密钥,因为,这是XOR荷兰国际集团与加密密钥的明文和XOR的逆转是XOR本身(纠正我,如果我错了)
所以,我的推杆以相反的顺序,我没有这个加密模块,但从来没有我得到了我的纯文本回:
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
而且我也想过,也许我不应该实现模块的反向模型,也许我必须使用那些我加密过的模块,只能以相反的顺序;猜猜看是什么?没有工作! :
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);
所以这里是问题:什么是错的? ||如果你愿意,应用这些所谓的模块或函数的正确顺序是什么?
您是否正确计算了您的S盒,导致您无法使用您用于加密的同一盒子。 http://en.wikipedia.org/wiki/S-box 维基百科英文版本中缺少此评论。直接看看这个规范:http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf你已经计算了要解密的反向S盒。 – evildead 2010-08-09 01:43:05
实际上在rev_subbytes上我有Rijndael的反向S盒 – 2010-08-09 01:46:15
有一个很棒的工具:http://www.cryptool.de/在这里你可以手动进行任何转换。也许你必须调试每一步,也许该工具将帮助你验证每一步。 – evildead 2010-08-09 01:49:06