赞
踩
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; }**
在这里主要讲解一下,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,表示解密。
输出结果如下:
可见只对数据的前八个字节进行了加密和解密。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。