Crypto++库安装、测试
项目中需要使用到C++加密解密库,选择了Crypto++这个开源库,于是先安装并写一个小例子试试
一、下载
网址:http://www.cryptopp.com/#download
二、打开项目
下载后加压缩,并进入目录,打开cryptest.sln文件,打开解决方案,此解决方案是用vs2005建立的
打开解决方案后,会看到有4个项目存在:cryptest、cryptlib、cryptopp、dlltest
我们得到的是Crypto++这个算法库的源码,如果想要在我们的项目中使用它,必须先把它编译成为库
生成项目cryptlib即可得到我们想要的库。
在适当地地方建立一个目录crypto++在内部新建lib和include目录分别存放头文件和生成的库。
三、编写我们的示例程序
首先需要把上一步得到的库和头文件路径添加到我们的示例程序项目中。
示例代码如下:
#include <iostream>
#include "aes.h" #pragma comment(lib, "cryptlib.lib") using namespace std;
using namespace CryptoPP; int main(int argc, char **argv)
{
// AES使用的固定参数是以类AES中定义的ENUM数据类型出现的,而不是成员函数或者变量
// 因此需要用::符号来索引
cout << "AES Parameters: " << endl;
cout << "Algorigthm name: " << AES::StaticAlgorithmName() << endl; // Crypto++库中一般用字节数表示长度,而不是常用的字节数
cout << "Block size: " << AES::BLOCKSIZE * << endl;
cout << "Min Key length: " << AES::MIN_KEYLENGTH * << endl;
cout << "Max key Lenght: " << AES::MAX_KEYLENGTH * << endl; // AES中只包含一些固定的数据,而加密解密的功能有AESEncryption和AESDecryption完成
AESEncryption aesEncryptor; // 加密器 unsigned char aesKey[AES::DEFAULT_KEYLENGTH]; // 密钥
unsigned char inBlock[AES::BLOCKSIZE] = ""; // 要解密的数据块
unsigned char outBlock[AES::BLOCKSIZE]; // 加密后的密文
unsigned char xorBlock[AES::BLOCKSIZE]; // 必须为全零 memset(xorBlock, , AES::BLOCKSIZE); aesEncryptor.SetKey(aesKey, AES::DEFAULT_KEYLENGTH); // 设置加密密钥
aesEncryptor.ProcessAndXorBlock(inBlock, xorBlock, outBlock); // 以十六进制显示加密后的数据
for (int i = ; i < ; i++)
{
cout << hex << (int)outBlock[i] << " ";
}
cout << endl; // 解密
AESDecryption aesDecryptor;
unsigned char plainText[AES::BLOCKSIZE]; aesDecryptor.SetKey(aesKey, AES::DEFAULT_KEYLENGTH);
aesDecryptor.ProcessAndXorBlock(outBlock, xorBlock, plainText); for (int i = ; i < ; i++)
{
cout << plainText[i];
}
cout << endl; return ;
}
因为项目中选择使用对称加密算法aes来实现,所以只写了这一个示例,Crypto++库支持许多种加密解密算法,其他的待以后再来学习。
参考:
http://blog.163.com/kevinlee_2010/blog/static/169820820201162252718894/
http://www.cnblogs.com/linyawen/archive/2013/08/23/3277438.html
http://www.open-open.com/lib/view/open1381633246848.html
http://www.2cto.com/kf/201108/99205.html
Crypto++库安装、测试的更多相关文章
- windows下python3.7安装gmpy2、Crypto 库及rsa
基于python3.7在windows下安装gmpy2 先检查一下是否安装了wheel文件包,在cmd中输入wheel,查看一下,如果没有安装,则输入安装:pip install wheel 如果遇到 ...
- DCMTK3.6.1(MD支持库)安装说明
转载:http://qimo601.iteye.com/blog/1685135 [前言] 最近,因为需要开发DICOM网管模块,必须使用DCMTK的DcmNet模块.但是DCMTK3.6.0在Dcm ...
- Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...
- ubuntu下opencv2.4.9安装测试
ubuntu下opencv2.4.9安装测试 whowhoha@outlook.com 一.依赖包安装 1. build-essential 软件包 sudo apt-get install bui ...
- ubuntu-10.04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版
主要参考文档:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 一. 32位版本: coreseek安装需要预装的软件: ap ...
- python 库安装笔记
python 库安装笔记 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-2-22 友情提示 安装python库的过程中 ...
- Python3.5下安装&测试Scrapy
1.引言 Scrapy框架结构清晰,基于twisted的异步架构可以充分利用计算机资源,是做爬虫必备基础,本文将对Scrapy的安装作介绍. 2.安装lxml 2.1 下载地址:https://ww ...
- 【推荐】Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
随机推荐
- 【Treap模板详细注释】BZOJ3224-普通平衡树
模板题:D错因见注释 #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析
Scala函数式编程 ----------------------------------------------------------------------------------------- ...
- iOS 自定义相机带拍摄区域边框及半透明遮罩层(含源码)
开始时准备封装成ViewController的相机,但是在不改我相机控件源码的情况下,使用者很难自定义UI.于是想到将相机核心功能封装到View里,暴露出功能方法给外面调用,调用者只需将LFCamer ...
- Android获取屏幕的宽度和高度(dp)
public void getAndroiodScreenProperty() { WindowManager wm = (WindowManager) this.getSystemService(C ...
- Ubuntu 16.04下将ISO镜像制作成U盘启动的工具-UNetbootin(UltraISO的替代工具)
说明: 1.在Windows下制作ISO镜像的U盘启动工具有很多,但是在Linux平台下估计就只有UNetbootin这个工具最好用了,效果和Windows下的制作方法差不多,但是这个工具只能针对Li ...
- net core 踩坑
1.压缩静态文件,要nuget BuildBundlerMinifier 2.DI 自动注入 添加了两个类,才能完成 3.所有静态文件必须放在wwwroot下,不然访问不到 4.ajax 提交Typ ...
- htmltestrunner解决错误日志出界问题
扩大背后的区域放大,让它看起来没有出界 .popup_window { display: none; position: relative; left: 0px; top: 0 ...
- 科研不是比赛,而是一种对未知和完美的自我追求——跟邢波(Eric Xing)面对面聊科研
编者按:6月26日,2014年国际机器学习大会(ICML)在北京国际会议中心完美落幕.作为机器学习领域两大顶尖年会之一,这是 ICML大会30多年来首次来到中国和远东,在国内的机器学习界震动不小.身为 ...
- docker_usb开发软件部署
1.docker镜像包 (备注:61提供,带桌面版本) rayosx2.0.2.tar 2.paho-mqtt dnf install git -y git clone https://github ...
- java中List和Array相互转换
List to Array List 提供了toArray的接口,所以可以直接调用转为object型数组 List<String> list = new ArrayList<Stri ...