基于Crypto++的aes 字符串加解密实现
esaes.h:
#ifndef ESAES_H
#define ESAES_H
#include <cryptopp/aes.h>
#include <iostream>
#include <string>
using namespace std;
using namespace CryptoPP;
class ESAes
{
public:
ESAes();
string encrypt();
string decrypt();
void test();
void Setkey(string inkey);
void Setcleartext(string incleartext);
void Setciphertext(string inciphertext);
private:
string cleartext;
string ciphertext;
string key;
unsigned char inBlock[AES::BLOCKSIZE];
}; #endif // ESAES_H
esaes.cpp
string ESAes::encrypt()
{
//加密
AESEncryption aesEncryptor; //加密器 unsigned char aesKey[AES::DEFAULT_KEYLENGTH]=""; //密钥
strcpy((char*)aesKey, key.c_str());
unsigned char inBlock[AES::BLOCKSIZE]="";// = cleartext; //要加密的数据块
strcpy((char*)inBlock,cleartext.c_str());
unsigned char outBlock[AES::BLOCKSIZE]; //加密后的密文块
unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零 memset( xorBlock, 0, AES::BLOCKSIZE ); //置零 aesEncryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); //设定加密密钥
//aesEncryptor.SetKey();
aesEncryptor.ProcessAndXorBlock( inBlock, xorBlock, outBlock ); //加密 //以16进制显示加密后的数据
//for( int i=0; i<16; i++ ) {
//cout << hex << (int)outBlock[i] << " ";
//}
//这里将字符数组转换成string类型
ciphertext=(char*)outBlock;
return ciphertext;
}
string ESAes::decrypt()
{
//解密
AESDecryption aesDecryptor;
unsigned char aesKey[AES::DEFAULT_KEYLENGTH]=""; //密钥
strcpy((char*)aesKey, key.c_str());
unsigned char plainText[AES::BLOCKSIZE];
//unsigned char outBlock[AES::BLOCKSIZE]=ciphertext; //加密后的密文块
unsigned char outBlock[AES::BLOCKSIZE]="";
strcpy((char*)outBlock,ciphertext.c_str());
unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零 memset( xorBlock, 0, AES::BLOCKSIZE ); //置零 aesDecryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); //细心的朋友注意到这里的函数不是之前在DES中出现过的:ProcessBlock,
//而是多了一个Xor。其实,ProcessAndXorBlock也有DES版本。用法跟AES版本差不多。
//笔者分别在两份代码中列出这两个函数,有兴趣的朋友可以自己研究一下有何差异。
aesDecryptor.ProcessAndXorBlock( outBlock, xorBlock, plainText ); //for( int i=0; i<16; i++ )
//{
// cout << plainText[i];
//}
cleartext=(char*)plainText;
//cout << endl;
return cleartext;
}
void ESAes::Setkey(string inkey)
{
//设置密钥
this->key=inkey;
} void ESAes::Setcleartext(string incleartext)
{
this->cleartext=incleartext;
}
void ESAes::Setciphertext(string inciphertext)
{
ciphertext=inciphertext;
}
基于Crypto++的aes 字符串加解密实现的更多相关文章
- android中使用jni对字符串加解密实现分析
android中使用jni对字符串加解密实现分析 近期项目有个需求.就是要对用户的敏感信息进行加密处理,比方用户的账户password,手机号等私密信息.在java中,就对字符串的加解密我们能够使用A ...
- node.js 实现 AES CTR 加解密
node.js 实现 AES CTR 加解密 node aesctr 前言 由于最近我们在做一款安全的文件分享 App, 所有文件均需要使用 aes ctr 来进行加密,aes key 还有一整套完整 ...
- AES对称加解密
简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher fee ...
- 最新版-Python和Java实现Aes相互加解密
前情 需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然. Python实现 Python为3.6版本 # -*- coding: ...
- java C# objective-c AES对称加解密
/** * AES加解密 */ public class AESHelper { final static String AES_KEY = "43hr8fhu34b58123"; ...
- AES && DES加解密
MD5加密一般不可逆,只能暴力突破.所以这边记录一下一些关于字符串的加解密的两种方法,以便自己学习 AES public class AESHelper { public static string ...
- JAVA AES文件加解密
AES加解密算法,代码如下: /** * Created by hua on 2017/6/30. */ import javax.crypto.Cipher; import javax.crypto ...
- iOS - (base64对字符串加解密)
今天公司让做支付系统,为了安全起见,需要对一些数据进行加密,然而我首想到的就是 base64 ,严格来说这不是一种加密方式,这只是将原有的一些字符串或者其它的一些文本进行一个转化而已,就是转化成数字, ...
- 华为OJ:字符串加解密
题目描述 1.对输入的字符串进行加解密,并输出. 2加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该 ...
随机推荐
- linux驱动之中断方式获取键值
linux驱动之中断方式获取键值 ----------------------------------------------------------------------------------- ...
- 分布式数据库DDM Sidecar模式负载均衡
简介 1.分布式数据库中间件 DDM 分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离 ...
- S5P4418裸机开发系列教程--源代码下载
S5P4418裸机系列教程之stdio S5P4418裸机系列教程之shell命令行 S5P4418裸机系列教程之串口回显 S5P4418裸机系列教程之复位測试 S5P4418裸机系列教程之led跑马 ...
- java 翻页工具类
Pagination类 package com.paic.bics.core.mybatis.page; import java.util.List; @SuppressWarnings(" ...
- ionic/cordova 真机调试
android下简单,连接手机后,直接: myProjectPath>ionic run android ios下比较麻烦点,要先装ios-deploy: sudo npm install - ...
- JS重名解决方案
一个页面如果引用多个JS,或者像ASP.NET MVC,一个视图包含多个子视图,每个子视图有自己的JS,那么变量.函数的重名冲突机会将会大增. 如何解决? 这里有一个方案: 1.用类来封装子页的JS代 ...
- jQuery通过地址获取经纬度demo
在开始之前,首先需要登录百度地图API控制台申请密钥ak. 1.登录百度地图开放平台http://lbsyun.baidu.com 注册账号,完善信息,点击网站右上角的“API控制台”,点击,创建应用 ...
- HDU 5832A water problem
大数 判断整除 /* *********************************************** Author :guanjun Created Time :2016/8/14 1 ...
- 【HDU 4547】 CD操作
[题目链接] 点击打开链接 [算法] 分四种情况讨论 : 1. 当前目录和目标目录是同一目录,不需要变换,答案为0 2. 当前目录是目标目录的祖先,答案为当前目录的深度 - 目标目录的深度 3. 当前 ...
- windows下mongodb设置用户名密码&用python连接
环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.confdbpa ...