IDEA密码算法
文章目录
IDEA加密流程
国际数据加密算法 (International Data Encryption Algorithm,IDEA) 是最强大的加密算法之一。
IDEA的明文长度为 64 位,而密钥长度为 128 位。
IDEA 加密流程:
IDEA 每轮的加密过程
末轮后的输出变换:
IDEA 密钥的产生:
代码部分:
#include<iostream>
#include<bitset>
#include<math.h>
using namespace std;
//定义简单的别名
typedef bitset<16> code; //16位
typedef bitset<128> key; //128位秘钥
//定义一些变量
bitset<16> sub_key[52]; //52个子秘钥
bitset<16> inv_sub_key[52]; //52个逆子秘钥
bitset<64> plaint_txt;
异或运算
code XOR(code code_1, code code_2)
{
return code_1 ^ code_2;
}
加法运算
code Plus(code code_1, code code_2)
{
int tmp = 0;
code result;
for (int i = 0; i < 16; i++) //二进制转换成十进制
{
tmp += code_1[i] * pow(2, i) + code_2[i] * pow(2, i);
}
tmp %= 65536;
bitset<16> binary(tmp); //转换成二进制
for (int i = 0; i < 16; i++)
result[i] = binary[i];
return result;
}
逆加法
code invPlus(code code_in)
{
int tmp = 0;
code result;
for (int i = 0; i < 16; i++) //二进制转换成十进制
tmp += code_in[i] * pow(2, i);
tmp = 65536 - tmp;
bitset<16> binary(tmp); //转换成二进制
for (int i = 0; i < 16; i++)
result[i] = binary[i];
return result;
}
乘法运算
code Times(code code_1, code code_2)
{
code result;
long long tmp;
long long tmp_1 = 0, tmp_2 = 0;
for (int i = 0; i < 16; i++) //二进制转换成十进制
{
tmp_1 += code_1[i] * pow(2, i);
tmp_2 += code_2[i] * pow(2, i);
}
if (code_1 == 0)
tmp_1 = 65536;
if (code_2 == 0)
tmp_2 = 65536;
tmp = (tmp_1 * tmp_2) % 65537;
if (tmp == 65536) //如果得到最大值即等价于0x0000
result = 0x0000;
else
{
bitset<16> binary(tmp); //转换成二进制
for (int i = 0; i < 16; i++)
result[i] = binary[i];
}
return result;
}