CryptoPP的 AES算法的使用(加密字符串)

密码学库CryptoPP中包含了大量的分组密码算法。如下图所示:
这里写图片描述
今天,介绍一下其中的AES算法的使用。和前面谈到的Cryptopp提供的随机数发生器一样,分组密码属于对称密码学的一个重要分支。在Cryptopp中,分组密码都继承自BlockCipherDocumentation。
这里写图片描述
因此,它们都有共同的接口。所以,如果想使用其他的分组密码加密下面示例代码中的字符串,只需要将AES的类名字替换成所使用的分组密码类名字即可。
关于Cryptopp中随机数发生器的使用,详见专栏《CryptoPP的使用以及设计原理和设计思想》(专栏链地址链接:https://blog.csdn.net/column/details/25854.html)

下面的示例程序演示了如何使用CryptoPP的AES算法加密和解密一个字符串。

示例代码如下:

#include<cryptlib.h>
#include<osrng.h>
#include<iostream>
#include<files.h>
#include<aes.h>
#include<modes.h>
#include<filters.h>
#include<hex.h>
using namespace std;
using namespace CryptoPP;


int main()
{

	cout << "key length: " << AES::DEFAULT_KEYLENGTH << endl;
	cout << "key length (min): " << AES::MIN_KEYLENGTH << endl;
	cout << "key length (max): " << AES::MAX_KEYLENGTH << endl;
	cout << "block size: " << AES::BLOCKSIZE << endl;

	AutoSeededRandomPool rnd;

	//产生一个随机数的密钥
	SecByteBlock key(0x00, AES::DEFAULT_KEYLENGTH);
	rnd.GenerateBlock( key, key.size() );

	//产生一个随机的初始向量
	SecByteBlock iv(AES::BLOCKSIZE);
	rnd.GenerateBlock(iv, iv.size());

	byte plainText[] = "Hello! How are you.";
	size_t messageLen = std::strlen((char*)plainText) + 1;

	//加密字符串
	CFB_Mode<AES>::Encryption cfbEncryption(key, key.size(), iv);
	cfbEncryption.ProcessData(plainText, plainText, messageLen);

	cout << endl << "加密结果(十六进制表示):" << endl;
	                                                               //显示加密结果至cout
	StringSource strSource1(plainText,messageLen,true,new HexEncoder( new FileSink(cout)));
	
	//解密字符串
	CFB_Mode<AES>::Decryption cfbDecryption(key, key.size(), iv);
	cfbDecryption.ProcessData(plainText, plainText, messageLen);

	cout << endl << "解密结果(十六进制表示):" << endl;
	                                                               //显示解密结果至cout
	StringSource strSource2(plainText,messageLen,true,new HexEncoder( new FileSink(cout)));
	cout << endl;


	return 0;
}

执行上述程序,运行结果如下图所示:
这里写图片描述

在上面的示例代码中,使用到了CryptoPP的pipeling相关算法,例如StringSource、FileSink、HexEncoder等。这些算法的出现,使得CryptoPP库使用起来非常的便利。关于这些算法的使用后续将一一列举,可以在专栏《CryptoPP的使用以及设计原理和设计思想》(专栏链地址链接:https://blog.csdn.net/column/details/25854.html)中寻找。

在上面的代码中,加密时使用到了分组密码常用的加密模式CFB模式,这是必须的。分组密码在使用的时候必须使用相关的分组模式,否则,会导致不安全。分组密码的模式还有OFB、CTR等模式。

更多示例代码详见《深入浅出CryptoPP密码学库》随书电子文档:https://github.com/locomotive-crypto/crypto_book_1st

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值