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 字符串加解密实现的更多相关文章

  1. android中使用jni对字符串加解密实现分析

    android中使用jni对字符串加解密实现分析 近期项目有个需求.就是要对用户的敏感信息进行加密处理,比方用户的账户password,手机号等私密信息.在java中,就对字符串的加解密我们能够使用A ...

  2. node.js 实现 AES CTR 加解密

    node.js 实现 AES CTR 加解密 node aesctr 前言 由于最近我们在做一款安全的文件分享 App, 所有文件均需要使用 aes ctr 来进行加密,aes key 还有一整套完整 ...

  3. AES对称加解密

    简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher fee ...

  4. 最新版-Python和Java实现Aes相互加解密

    前情 需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然. Python实现 Python为3.6版本 # -*- coding: ...

  5. java C# objective-c AES对称加解密

    /** * AES加解密 */ public class AESHelper { final static String AES_KEY = "43hr8fhu34b58123"; ...

  6. AES && DES加解密

    MD5加密一般不可逆,只能暴力突破.所以这边记录一下一些关于字符串的加解密的两种方法,以便自己学习 AES public class AESHelper { public static string ...

  7. JAVA AES文件加解密

    AES加解密算法,代码如下: /** * Created by hua on 2017/6/30. */ import javax.crypto.Cipher; import javax.crypto ...

  8. iOS - (base64对字符串加解密)

    今天公司让做支付系统,为了安全起见,需要对一些数据进行加密,然而我首想到的就是 base64 ,严格来说这不是一种加密方式,这只是将原有的一些字符串或者其它的一些文本进行一个转化而已,就是转化成数字, ...

  9. 华为OJ:字符串加解密

    题目描述 1.对输入的字符串进行加解密,并输出. 2加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该 ...

随机推荐

  1. linux驱动之中断方式获取键值

    linux驱动之中断方式获取键值 ----------------------------------------------------------------------------------- ...

  2. 分布式数据库DDM Sidecar模式负载均衡

    简介 1.分布式数据库中间件 DDM 分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离 ...

  3. S5P4418裸机开发系列教程--源代码下载

    S5P4418裸机系列教程之stdio S5P4418裸机系列教程之shell命令行 S5P4418裸机系列教程之串口回显 S5P4418裸机系列教程之复位測试 S5P4418裸机系列教程之led跑马 ...

  4. java 翻页工具类

    Pagination类 package com.paic.bics.core.mybatis.page; import java.util.List; @SuppressWarnings(" ...

  5. ionic/cordova 真机调试

    android下简单,连接手机后,直接: myProjectPath>ionic run android ios下比较麻烦点,要先装ios-deploy: ​sudo npm install - ...

  6. JS重名解决方案

    一个页面如果引用多个JS,或者像ASP.NET MVC,一个视图包含多个子视图,每个子视图有自己的JS,那么变量.函数的重名冲突机会将会大增. 如何解决? 这里有一个方案: 1.用类来封装子页的JS代 ...

  7. jQuery通过地址获取经纬度demo

    在开始之前,首先需要登录百度地图API控制台申请密钥ak. 1.登录百度地图开放平台http://lbsyun.baidu.com 注册账号,完善信息,点击网站右上角的“API控制台”,点击,创建应用 ...

  8. HDU 5832A water problem

    大数 判断整除 /* *********************************************** Author :guanjun Created Time :2016/8/14 1 ...

  9. 【HDU 4547】 CD操作

    [题目链接] 点击打开链接 [算法] 分四种情况讨论 : 1. 当前目录和目标目录是同一目录,不需要变换,答案为0 2. 当前目录是目标目录的祖先,答案为当前目录的深度 - 目标目录的深度 3. 当前 ...

  10. windows下mongodb设置用户名密码&用python连接

    环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.confdbpa ...