1.在工作中时常会遇到需要数据加密传输的情况,而AES加密则是安全性与运算速度都很好的加密算法,而且代码量极小,但给定的标准AES代码的S盒和逆S盒都是一样的,而为了加密数据的安全性,需要对内部的S盒修改时,则需要根据修修改后的S盒求出逆S盒,AES算法才能正确的加解密数据。
2.逆S盒是S盒的逆运算,比如数据0x12,则S盒则是将0x12,拆分为高低位两个数据,分别对应S盒的1行2列的数据,这里假设为0x58,而逆S盒的第5行8列的数据为0x12。
3.根据S盒与逆S盒原理写的C程序代码。
uint8_t Te_InvS[16][16] = { 0 }; //逆S盒缓存
uint8_t Te_InVSAdd[2] = { 0 }; //位置
for (uint8_t i = 0; i < 16; i++) { //计算逆S盒
for (uint8_t n = 0; n < 16; n++) {
Te_InVSAdd[0] = (S_BOX[i][n] >> 4) & 0x0f; //取行
Te_InVSAdd[1] = (S_BOX[i][n] >> 0) & 0x0f; //取列
Te_InvS[Te_InVSAdd[0]][Te_InVSAdd[1]] = i * 16 + n; //置值
}
}
其中的S_BOX为一个16*16的数组。