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. 具体解释Android定位

    相信非常多的朋友都有在APP中实现定位的需求,今天我就再次超炒冷饭,为大家献上国内开发人员经常使用到的三种定位方式.它们分别为GPS,百度和高德,惯例先简介下定位的背景知识. 什么是GPS定位.基站定 ...

  2. Tcl学习之--文件操作

    Tcl中文件名称操作遵循Unix/Linux的命名规范. x/y/z表示x文件夹下的y 子文件夹及y以下的子文件夹z. ~admin/email则表示admin用户的email目录. l  file ...

  3. MariaDB基础操作

    MariaDB: MariaDB是MySQL源代码的一个分支,随着Oracle买下Sun,MySQL也落入了关系型数据库王者之手.在意识到Oracle会对MySQL许可做什么后便分离了出来(MySQL ...

  4. 多button事件处理

    private void ButtonClick(object sender, RoutedEventArgs e) { Button cmd = (Button)e.OriginalSource; ...

  5. Python开发【第*篇】【Xpath与lxml类库】

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  6. 深入浅出Hibernate(二)多对一关系映射

    学习Hibernate是为了更方便的操作数据库,在数据库中的关系模型中存在多对一的关系,比方下图所看到的的员工和部门之间的关系,那么这样的关系在Hibernate中怎样映射呢?让我用一个小Demo来具 ...

  7. gdb 8.0.1连接qemu时,出现“Remote 'g' packet reply is too long”

    1 原因 “Note that other tutorials also add a "-S" parameter so QEMU starts the kernel stoppe ...

  8. where 1=1影响效率以及having和where的区别

    低效的“WHERE 1=1” 网上有不少人提出过类似的问题:“看到有人写了WHERE 1=1这样的SQL,到底是什么意 思?”. 其实使用这种用法的开发人员一般都是在使用动态组装的SQL. 让我们想像 ...

  9. Flask的闪现(message) 请求扩展 中间件 蓝图

    补充:一个编程思路 需求:做一些邮件短信微信的消息通知,比如账单告警之类的:比如数据库操作,数据库种类繁多:缓存的选择比如redis/memcache,诸如此类需要进行选择配置,如果我们单纯的用函数去 ...

  10. flask request 获取json内容2种方式

    # -*- coding: utf-8 -*-from flask import request, jsonify, json, Moduleimport loggingfrom web.utils. ...