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第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
随机推荐
- 【后缀数组】poj2406 Power Strings
连续重复子串(pku2406)给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的,求 R 的最大值.算法分析:做法比较简单,穷举字符串 S 的长度 k,然后判断是否满足.判断的 ...
- windows下虚拟环境安装方法
方法一:使用virtualenv安装虚拟环境 1.安装virtualenv pip install virtualenv 2.随意创建文件夹(将来虚拟环境会在这个文件夹) mkdir mypro ...
- cocos2d-x 扩展 修改 备注
1.引擎源码相关扩展 说明:class/cellsExt 下的全部文件为扩展文件,有auto字样的文件为生成文件,*.pkg文件为自动生成文件的接口配置档,参考tolua++,源文件中代在[s ...
- angularjs+requirejs整合
通过requirejs的配置让angularJS可以正常运行.以下是配置的步骤: 环境需求 require.js angular.js 有了这两文件,就可以进行下一步了,具体将文件放到哪个目录,可以跟 ...
- ListView控件(下)简单适配器
(一) 1.效果图 2.activiy_main.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- 常用 ARM 指令集及汇编
ARM7TDMI(-S)指令集及汇编 ARM 处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制 较为简单,ARM7TDMI(-S)具有 32 位 ARM 指令集和 16 位 T ...
- IE刷新后,文本框的值不变
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux内核分析(三)内核启动过程分析——构造一个简单的Linux系统
一.系统的启动(各历史节点) 在最开始的时候,计算机的启动实际上依靠一段二进制码,可以这么理解,他并不是一个真正的计算机启动一道程序.计算机在开始加电的时候几乎是没有任何用处的,因为RAM芯片中包括的 ...
- JavaWeb过滤器验证登录(避免未经登录进入主页)
今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下, ...
- Servlet执行时一般实现哪几个方法?
public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServ ...