C++加密库botan混合编译和简单使用
来源:互联网 发布:mac口红怎么样 编辑:程序博客网 时间:2024/06/07 00:22
C++加密库botan混合编译和简单使用
最近要用到加密数据,找了半天,有许多加密库:
- botan
- crypto++
- tomcrypt
- openssl
- MCrypt
- Cryptlib
- PolarSSL
- yaSSL
- GnuPG
尝试后发现还是botan简单好用。botan加密库是什么,百度一下就知道,在这里就不多说了。
首先,我不想用lib或者dll,于是乎想直接生成.h和.cpp文件加入工程使用。好在botan支持我的这种想法,我试了其他的几种库,不是使用静态库就是使用动态库,并没有办法直接将.h和.cpp文件加入工程编译。
1.到官网 http://botan.randombit.net/ 下载源文件,我下载的是最新版Botan-1.10.5,解压。
2.下载安装python,我是下载Python2.7.3版本,2.7的应该都行,别下载3.x.x的版本,用来编译botan会失败的,官网有说明,解决办法还没搞懂。
3.找到安装的python目录,复制python.exe的路径,我的是C:\Python27\python.exe,打开vs2008命令提示工具,定位到botan解压后的文件夹根目录下,将复制的python.exe路径粘贴,然后编辑成如下语句:C:\Python27\python.exe configure.py --c=msvc --gen-amalgamation 回车,之后会在botan根目录下生成botan_all.cpp和botan_all.h两个文件,这正是我们需要的。
4.新建控制台工程,将生成的cpp和h文件加入工程中,测试代码如下:
#include "stdafx.h"#include "botan_all.h"using namespace Botan;#include <iostream>#include <string>using namespace std;string cryptoAES(string input,string passphrase/*密码种子,MD5加密后作为密钥*/,Cipher_Dir opt) {//AES加密和解密 HashFunction* hash = get_hash("MD5"); SymmetricKey key = hash->process(passphrase); SecureVector<byte> raw_iv = hash->process('0'+ passphrase); InitializationVector iv(raw_iv, 16); string output=""; if (opt==ENCRYPTION) { Pipe pipe(get_cipher("AES-128/CBC", key, iv, opt),new Hex_Encoder);//Hex_Encoder表示加密后转码为十六进制输出 pipe.process_msg(input); output=pipe.read_all_as_string(); } else if(opt==DECRYPTION) { Pipe pipe(new Hex_Decoder,get_cipher("AES-128/CBC", key, iv, opt));//Hex_Decoder表示以十六进制字符串为输入,转码后进行解密 pipe.process_msg(input); output=pipe.read_all_as_string(); } return output;}int main(int argc, char* argv[]){ try { Botan::LibraryInitializer init;//初始化 string aes=cryptoAES("57ADD6949178720A6AAC4CD2B740B8BB","0000",DECRYPTION);//AES解密 cout<<aes<<endl; Botan::Pipe pipe(new Botan::Hash_Filter("MD5"), new Botan::Hex_Encoder);//MD5加密 pipe.process_msg("11112222"); string md5=pipe.read_all_as_string(); cout<<md5<<endl; } catch(std::exception& e) { std::cout << "Exception caught: " << e.what() << std::endl; } getchar(); return 0;}
如果编译不通过,在工程宏定义处加入宏NOMINMAX ,可以解决问题。参考资料:
http://www.cppblog.com/everett/archive/2012/07/07/182122.aspx
- C++加密库botan混合编译和简单使用
- 【加密/解密】C++加密算法库 Botan 在Windows 和 Linux 下的编译
- 使用Botan进行RSA公有密钥加密
- 问,加密算法有哪些?加密库有哪些?Botan入门使用
- C和C++的混合编译--extern “C”的使用
- C和C++混合编译
- Linux下c和cuda混合编译,并生成动态链接库.so和使用
- Linux下c和cuda混合编译,并生成动态链接库.so和使用
- Linux下c和cuda混合编译,并生成动态链接库.so和使用
- Botan在windows和linux平台下的编译
- C和C++混合编译
- C和C++混合编译
- C和C++混合编译
- C和C++混合编译
- C和C++混合编译
- c和C++混合编译
- .c和.cpp混合使用
- c和c++混合使用
- 一维数组建模表示二维的棋盘状态
- Github学习之SwipeRevealLayout好用的侧滑库
- <html>文本格式化、引用、引用和术语定义
- SQL 数据库分页技术
- ObjectARX2010二次开发之 --- DXF转G代码(1)
- C++加密库botan混合编译和简单使用
- Spark 数据ETL
- 增强for循环对于“二维”数组进行循环的案例
- Thread的suspend和stop方法的一些问题
- codeforces#348-C. Little Artem and Matrix-模拟
- 算法基础 - 二叉查找树变成有序双向链表
- firebug安装及其使用 视频【原创】
- codeforces#348-D - Little Artem and Dance-规律-模拟
- javascript入门基础小案例-----按键盘的方向键来控制块的移动z注释: