C++实现DES加密解密

DES算法原理及其实现 DES算法复杂难懂,但是易于实现。它只对小的位组进行简单的逻辑运算,用硬件和软件实现起来都比较有效。 描述: 分组加密算法, 64位一组; 对称算法; 密钥长度56位;基于加密的两个技术(混乱和扩散的组合);基于密钥作用于明文,称为轮(round), 在分组上16次实施相同的组合技术 概要: 对64位的明文分组进行操作 通过初始置换,将明文分成左半部分和右半部分,各32位长 进行16轮完全相同的运算,这些运算称为函数f,在运算过程中数据与密钥结合。 经过十六轮后,左、右半部分合在一起经过一个末置换(初始置 阅读详情

DES实验要求

实验目的

实现电子本模式(ECB)和密码分组链接模式(CBC)的DES算法。

实验要求

  1. 指定明文文件、密钥文件、初始化向量文件的位置和名称,加密的操作模式以及加密完成后密文文件的位置和名称。
  2. 加密时先分别从指定的明文文件、密钥文件和初始化向量文件中读取有关信息,然后按ECB和CBC操作模式分别进行加密,最后将密文(用16进制表示)写入指定的密文文件。解密类似。
  3. 统一将文件名命名如下:
    明文文件名:des_messages.txt
    密钥文件名:des_key.txt
    密文文件名:des_secret.txt
    解密结果文件名:des_decrypted.txt
    初始化向量文件:des_iv.txt
  4. 如果一个分组不足64bit,低位补0。

代码

DES.h

#ifndef DESH
#define DESH
#include <string>
using namespace std;

/*DES.h: declaration of the TDES、TBase64、TBase64DES class. */
/* TDES类说明:该类是DES和3DES算法类 */
class CDES {
   
   
public:
	CDES();
	virtual ~CDES();
	static char* HexToStr(string s);
	static string StrToHex(char* bytes, int bytelength);
	
	static bool EnCode();  //des加密
	static bool DeCode(); //des解密
protected:
	typedef bool(*PSubKey)[16][48];
	
	//计算并填充子密钥到SubKey数据中  
	static void SetSubKey(PSubKey pSubKey, const unsigned char Key[8]);
	
	//DES单元运算  
	static void DES(unsigned char Out[8], const unsigned char In[8], const PSubKey pSubKey, bool Type);
	
	/* 补足8位数据
	* Description: 根据协议对加密前的数据进行填充
	* @param nType: 类型:PAD类型
	* @param In: 数据串指针
	* @param Out: 填充输出串指针
	* @param datalen: 数据的长度
	* @param padlen: (in,out)输出buffer的长度,填充后的长度
	* @return true--成功;false--失败;
	*/
	static bool RunPad(bool bType, int nType, const unsigned char* In, unsigned datalen, unsigned char* Out, unsigned& padlen);
	
	/* 执行DES算法对文本加解密
	* Description    : 执行DES算法对文本加解密
	* @param bType   : 类型:加密ENCRYPT,解密DECRYPT
	* @param bMode   : 模式:ECB,CBC
	* @param In      : 待加密串指针
	* @param Out     : 待输出串指针
	* @param datalen : 待加密串的长度,同时Out的缓冲区大小应大于或者等于datalen
	* @param Key     : 密钥(可为8位,16位,24位)支持3密钥
	* @param keylen  : 密钥长度,多出24位部分将被自动裁减
	* @return true--成功;false--失败;
	*/
	static bool RunDES(bool bType, bool bMode, int PaddingMode, const unsigned char* IV, const unsigned char* In,
		unsigned char* Out, unsigned datalen, const unsigned char* Key, unsigned keylen);

private:
	/*static int hexCharToInt(char c);*/
	enum {
   
   
		ENCRYPT = 0,    // 加密  
		DECRYPT,          // 解密  
	};

	enum {
   
   
		ECB = 0,      // ECB模式  
		CBC             // CBC模式  
	};
	  
	enum {
   
   
		PAD_ISO_1 = 0,  // ISO_1填充:数据长度不足8比特的倍数,以0x00补足,如果为8比特的倍数,补8个0x00  
	};
}; 
#endif

DES.cpp

#include "DES.h"
#include "memory.h"
#include <iostream>
#include<fstream>
using namespace std;

/* initial permutation IP */
const char 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
};

/* final permutation IP^-1 */
const char IPR_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
};

/* expansion operation matrix */
const char E_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
};

/* 32-bit permutation function P used on the output of the S-boxes */
const char 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
};

/* permuted choice table (key) */
const char PC1_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
};

/* permuted choice key (table) */
const char 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, 33, 48,
	44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
};

/* number left rotations of pc1 */
const cha
信息安全实验一:DES加密算法的实现 一、实验目的及要求1.熟悉加密、解密算法;懂得加密在通信中的重要作用;2.对输入的十六进制数加密(把输入的字符转化成整数),比较输入和输出,当把输入的数改变一个比特时,比较输出的变化,说明原因。3.实现对一个文件进行加解密,提交程序代码和执行结果。二、实验内容本实验通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。根据所提供的程序分析DES算法的实现过程。在分析密钥生成函数、加密函数(8字节)、解密函数、测试函数和密钥长度检验函数的基础上,用C/VC++或Java语言编写程序实现对文本文 阅读详情

相关推荐

C++实现DES加密解密算法

文章目录第一部分 DES概述1.1 DES数据加密标准简介1.2 DES算法流程第二部分 DESC++实现 第一部分 DES概述 1.1 DES数据加密标准简介 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorit

weixin_44679145的博客 4474

DES算法实现C++版)

一、DES算法原理 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、DES算法原理系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

无知亦乐 1万+

DES 加密解密算法的C++实现

网络与信息安全 Introduction to Network and Security   ——DES 加密解密算法的C++实现                 姓 名:                        学 号:                        学 院:                              2010年10月

小王的博客 4930

DES加密与解密原理及C++代码实现

一.DES算法简介 DES(Data Encryption Standard)是目前最为流行的加密算法之一。 对称性:DES是对称的,也就是说它使用同一个密钥来加密和解密数据。与此相对的是RSA加密算法,是一种非对称加密算法 分组性:DES还是一种分组加密算法,该算法每次处理固定长度的数据段,称之为分组。DES分组的大小是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填...

2020 5万+

C/C++接口实现DES加密解密算法

DES,即数据加密标准(Data Encryption Standard),是一种广泛应用于计算机安全领域的对称密钥加密算法。它通过将64位的数据块进行多次加密处理来保证数据的机密性。在C/C++编程中,开发者可以使用DES算法的库函数或API来进行数据的加密与解密操作,这通常涉及密钥的生成、数据的分组和变换等步骤。

weixin_42591908的博客 583

C++与C#中DES加密解密实现对比

DES,即Data Encryption Standard(数据加密标准),是一种对称密钥加密块密码算法,广泛应用于商业和金融机构以保护电子数据的机密性。它由IBM公司在1970年代初期开发,并在1976年被美国政府采纳为官方的加密标准。在本文中,我们深入探讨了DES加密算法的原理、在不同编程语言中的实现方式,以及在实际应用中密钥管理和数据填充策略的重要性。我们分析了跨平台兼容性考虑和安全编程实践的必要性,并提供了实际代码示例来说明如何在C++和C#中应用这些技术。

weixin_33375360的博客 819

DES加密解密C++实现

这是我们信安协会很早布置的作业,前几天终于写完了,嘿嘿O(∩_∩)O~ 其实DES加密很简单,流程如下 1.对64位明文进行初置换,结果为A 2.将A分为两部分,左32位记为L,右32位记为R 3.对R进行拓展置换,得到X(48位) 4.将第I轮的密钥与X异或,得到Y(48位) 5.将Y穿入S盒,得到Z(32位) 6.将Z与L异或,结果传入L中 7.交换R和L 8

Canon of Code 2万+

DES3加密解密项目实践:C++与Visual C++实现

Triple DES,简称3DESDES3,是数据加密标准(DES)的一种更安全的替代方案。它基于DES算法,通过三次加密来提高加密强度,防止密钥泄露和暴力破解攻击。尽管现在广泛使用更高级的加密算法,比如AES(高级加密标准),但在某些遗留系统和特殊应用场景中,3DES仍然发挥着重要的作用。

weixin_42511832的博客 1142

des加密解密算法c语言实现,C++实现DES加密算法实例解析

本文所述实例是一个实现DES加密算法的程序代码,在C++中,DES加密是比较常用的加密算法了,且应用非常广泛。本CPP类文件可满足你的DES加密需要,代码中附带了丰富的注释,相信对于大家理解DES可以起到很大的帮助。具体实现代码如下:#include "memory.h"#include "stdio.h"enum {encrypt,decrypt};//ENCRYPT:加密,DECRYPT:解密...

weixin_30335379的博客 1660

DES加密解密算法C++实现

DES加密算法并不难,是由一些简单的变换得来的,难的是要有足够的耐心。蒟蒻并不想说自己用了多久才把代码写好的。 代码: 我真的太难了QAQ #include<iostream> using namespace std; int jiami(){ // 明文 int mingwen[64]; ...

十七的博客 3573

C++实现DES加密解密库:数据安全的基石

在信息安全领域,数据加密技术是保障数据传输安全和存储安全的基础。DES(Data Encryption Standard)算法,作为早期广泛使用的对称加密技术之一,它将明文数据通过特定的算法转换成密文,以防止未授权访问。本章将介绍DES的基本原理,包括其加密解密过程、子密钥的生成方式、以及如何在密钥扩展、初始置换、和最终置换等环节保证加密的强度。通过深入分析这些关键组成部分,我们可以对DES的工作流程有一个全面的认识。

weixin_35794316的博客 641

C++实现DES算法CBC模式加密解密的详细指南

数据加密标准(DES)是一个经典的对称密钥加密算法,广泛应用于信息安全领域,以确保数据的机密性和完整性。DES算法采用64位的分组密码结构,其核心是基于复杂的置换和替代操作。尽管DES现在已不是最安全的选择,但它在信息安全的发展历史中占有重要位置,为现代加密技术的发展奠定了基础。链式区块密码模式(Cipher Block Chaining, CBC)是一种常见的加密操作模式,它解决了电子密码本(ECB)模式的一些安全问题。

weixin_36288992的博客 1368

DES算法C++程序设计和实现

文章目录1 算法原理概述2 总体结构3 模块分解4 数据结构5 编译运行结果6 源代码 1 算法原理概述 Data Encryption Standard (DES) 是一种典型的对称密钥算法,采用块加密方法,它以64位为分组长度,64位一组的明文作为算法的输入,通过与密钥运算和一系列复杂的操作,输出同样64位长度的密文,用同一密钥可以解密,所以该算法所有的保密性依赖于密钥,认为只有持有加密所用的...

Runner1st的博客 3881

鸿蒙Des 加密解密 C++版本

本文介绍了在鸿蒙系统中使用C++实现DES加密解密的方案。由于鸿蒙API20(2025年10月发布)才内置DES算法,当前需通过C++实现。文章详细说明了如何基于开源库cryptopp进行开发:首先下载并编译cryptopp库,配置鸿蒙SDK环境;然后在项目中创建cpp目录结构,通过CMakeLists.txt引入cryptopp库;最后展示了napi_init.cpp的核心解密代码实现,包括hex解码、随机字符串生成和DES解密功能。该方案将加密算法打包成so库,为鸿蒙应用提供加密能力。

xo19882011的专栏 1369

DES加密解密算法(简单、易懂、超级详细)_des算法

cout << “加密结果为(二进制):” << wen(wenBinary, num) << endl << endl;cout << “解密结果为(字符):” << wen(wenBinary, num) << endl << endl;

2501_90363348的博客 1002

DES加密解密算法实战:基于Visual C++实现与分析

经过S盒压缩后,我们得到32位输出。但还不够!P盒负责把这些位重新洗牌,确保每一个输出位都依赖于多个S盒的结果。P_BOX表如下:实现方式和其他置换类似:i < 32;++i) {至此,F函数四部曲完成:扩展 → 混合 → 替换 → 扩散。每一环都在为最终的“不可预测性”添砖加瓦。subgraph "F函数四步流程"A[输入32位R] --> B[E-box扩展至48位]B --> C[与子密钥异或]C --> D[8个S盒并行替换]

weixin_42452483的博客 604

DES加密解密系统完整开发实战

DES(Data Encryption Standard)是一种对称密钥加密块密码,由IBM在20世纪70年代初期开发,并最终被美国国家标准局(NBS,现在的NIST)采纳并标准化。DES成为了第一个受到广泛采用的加密标准,其设计初衷是为政府机构和商业机构提供一种高效的加密手段,以确保数据的机密性。从1976年开始被作为联邦信息处理标准(FIPS PUB 46),DES在接下来的20年里成为了实际的数据加密标准,广泛应用于金融、保险和电子商务等行业。

weixin_30632267的博客 782
上一篇: C++实现RSA加密解密
下一篇: Python实现安全的通信模型
零商
博客等级 码龄8年 236粉丝 80原创
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值