IDEA密码算法 + C++代码

本文详细介绍了IDEA加密算法的加密流程,包括每轮加密过程、末轮输出变换以及密钥的产生。还提供了C++代码示例,展示了如何通过异或、加法、乘法和欧几里得扩展算法生成子秘钥和逆子秘钥,以及加密和解密的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
拓展欧几里得算法

                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qinquanquan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值