当前位置:   article > 正文

c++使用openssl接口的DES ECB函数来实现加密和解密操作(对待加密数据的前8个字节进行加密)

c++使用openssl接口的des

这里的配置方式和上一篇文章用openssl生成随机数的配置方式是相同的,就不进行赘述了,主要将关注点放在代码本身。

ECB加密方式,是按字节进行加密的,每8个字节为一组,按组进行加密,如果加密前的明文是相同的,那么加密后的密文也是相同的,这样一来,就存在一定的问题,并且本篇博客只关注8个字节的加密,对于超过8个字节的加密没有进行考虑
实现代码如下:

**#include<iostream>
#include<openssl/des.h>   //进行DES加密
using namespace std;
int main(int argc, char* argv[])
{
	unsigned char data[] = "12345678954554";  //将要进行加密的数据,一次只能加密8个字节,多出的将不会进行加密
	unsigned char out[1024] = { 0 };    //加密之后的输出数据
	unsigned char out2[1024] = { 0 };   //解密之后的输出数据
	//1.设置密钥
	const_DES_cblock key = "1234567";  //用来生成密钥
	DES_key_schedule key_sch;         // 生成之后的密钥
	cout << sizeof(const_DES_cblock) << endl; //查看一下const_DES_cblock的字节数
	cout << sizeof(DES_cblock) << endl;
	cout << sizeof(DES_key_schedule) << endl;
	DES_set_key(&key, &key_sch);
	//2.用ECB的方式来进行加密(8字节)
	DES_ecb_encrypt((const_DES_cblock*)data, (DES_cblock*)out, &key_sch, 1);//1是加密,0是解密
	cout << out << endl;
	//3.使用ECB的方式进行解密(8字节)
	DES_ecb_encrypt((const_DES_cblock*)out, (DES_cblock*)out2, &key_sch, 0);
	cout << out2 << endl;

	return 0;
}**
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里主要讲解一下,DES_set_key(const_DES_cblock* key,DES_key_schedule *schedule)函数的使用和DES_ecb_encrypt(const_DES_cblock* in,DES_cblock* out,DES_key_schedule *schedule,int enc)函数的使用。
const_DES_cblock是一个8位的char型数组,DES_cblock也是一个8位的char型数组,在第一个函数中,key用来初始化密钥,schedule用来存储生成后的密钥。
在第二个函数中,in用来存储要加密的明文,out用来存储加密后的密文,schedule是加密所用的密钥,enc为1,表示加密,enc为0,表示解密。
输出结果如下:
可见只对数据的前八个字节进行了加密和解密。
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号