DES加解密算法的ECB及CBC模式的C++实现

本文介绍了DES加解密算法在电码本模式(ECB)和密码分组链接模式(CBC)下的C++实现。程序包含des.h头文件和main.cpp实现部分,通过读取文件内容进行加密和解密操作,密钥在代码中设定,密文以十六进制显示。
摘要由CSDN通过智能技术生成

分组密码工作模式

DES 的工作模式:电码本模式(ECB)、密码分组链接模式(CBC)。

ECB 模式的加密过程:

Ci=E(K,Pi),i=1,2···N.

CBC 模式的加密过程:

C1=E(K,[P1⊕Ⅳ]),

Cj=E(K,[Pj⊕Cj-1],j=1,2···N.

程序分为两个文件。des.h头文件中定义了算法中需要用到的置换表,并进行了函数声明;main.cpp文件实现了从文件读取内容,使用ECB电码本与CBC分组链接两种模式的加解密。其中密钥在程序中设置,密文为方便表示,以十六进制形式输出。

//des.h
#pragma once
#include <iostream>
using namespace std;

typedef enum { en, de } MODE;
typedef const unsigned char TABLE;

// 初始置换IP表
static TABLE IP_Table[64] =
{
	58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
	62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
	57, 49, 41, 33, 25, 17,  9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
	61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
};

// 逆初始置换IP1表
static TABLE IP1_Table[64] =
{
	40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
	38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
	36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
	34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41,  9, 49, 17, 57, 25
};

// 扩展置换E表
static TABLE EXTENSION_Table[48] =
{
	32,  1,  2,  3,  4,  5,
	 4,  5,  6,  7,  8,  9,
	 8,  9, 10, 11, 12, 13,
	12, 13, 14, 15, 16, 17,
	16, 17, 18, 19, 20, 21,
	20, 21, 22, 23, 24, 25,
	24, 25, 26, 27, 28, 29,
	28, 29, 30, 31, 32,  1
};

// P盒置换表
static TABLE P_Table[32] =
{
	16, 7, 20, 21, 29, 12, 28, 17,  1, 15, 23, 26,  5, 18, 31, 10,
	 2, 8, 24, 14, 32, 27,  3,  9, 19, 13, 30,  6, 22, 11,  4, 25
};

// 密钥置换表
static TABLE KEY_Table[56] =
{
	57, 49, 41, 33, 25, 17,  9,  1, 58, 50, 42, 34, 26, 18,
	10,  2, 59, 51, 43, 35, 27, 19, 11,  3, 60, 52, 44, 36,
	63, 55, 47, 39, 31, 23, 15,  7, 62, 54, 46, 38, 30, 22,
	14,  6, 61, 53, 45, 37, 29, 21, 13,  5, 28, 20, 12,  4
};

// 压缩置换表
static TABLE PC2_Table[48] =
{
	14, 17, 11, 24,  1,  5,  3, 28, 15,  6, 21, 10,
	23, 19, 12,  4, 26,  8, 16,  7, 27, 20, 13,  2,
	41, 52, 31, 37, 47, 55, 30, 40, 51, 45,
  • 3
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值