社区
C++ 语言
帖子详情
cryptopp的使用
SammyLan
2007-05-12 07:02:05
有谁了解cryptopp库的
源码中的示例有点乱,而且时间比较急,暂时不想看那些示例
如果有谁比较熟悉的
麻烦简单说一下使用该库需要做什么样的初始化
最好能给个简单的使用MD5,RSA,DES算法的例子
谢谢了
...全文
2472
18
打赏
收藏
cryptopp的使用
有谁了解cryptopp库的 源码中的示例有点乱,而且时间比较急,暂时不想看那些示例 如果有谁比较熟悉的 麻烦简单说一下使用该库需要做什么样的初始化 最好能给个简单的使用MD5,RSA,DES算法的例子 谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
代码误解
2021-06-13
打赏
举报
回复
cryptopp库示例代码:https://gitee.com/locomotive_crypto
AdrianYu
2012-09-23
打赏
举报
回复
Mark, 等回去了再看
matthew1985
2010-08-09
打赏
举报
回复
..en......................
spofmy
2007-05-15
打赏
举报
回复
学习了
ly19820701
2007-05-15
打赏
举报
回复
mark
Oversense
2007-05-14
打赏
举报
回复
Crypto++ 挺好用的
/*
SHA (or any other hash module) is used like this:
#include "sha.h" // or "md5.h" for MD5, etc
...
SHA().CalculateDigest(pbOutputBuffer, pbData, nDataLen);
// pbOutputBuffer must be SHA::DIGESTSIZE bytes in length
or, if you have data that's made up of multiple pieces:
SHA hash;
hash.Update(pbData1, nData1Len);
hash.Update(pbData2, nData2Len);
hash.Update(pbData3, nData3Len);
hash.Final(pbOutputBuffer);
*/
/*
How do I use hex encoding and decoding?
#include "hex.h"
// Encoding
HexEncoder hexEncoder;
hexEncoder.Put(pDataA,dwLenA);
hexEncoder.Put(pDataB,dwLenB);
hexEncoder.Put(pDataC,dwLenC);
hexEncoder.MessageEnd();
hexEncoder.Get(pData2,(dwLenA+dwLenB+dwLenC)*2);
// Decoding
HexDecoder hexDecoder;
hexDecoder.Put(pData,dwLen);
hexDecoder.MessageEnd();
hexDecoder.Get(pData2,dwLen/2);
*/
SammyLan
2007-05-12
打赏
举报
回复
下载了一个OpenSSL,没有VSS的工程文件,很不习惯
各位有什么好建议
介绍一个简单易用的加密算法库
不要求速度,只要求易用就行了
先谢谢了
lockhall
2007-05-12
打赏
举报
回复
第一次听说...
mLee79
2007-05-12
打赏
举报
回复
以前用过,现在都改用 openssl 了 。。。
foochow
2007-05-12
打赏
举报
回复
纯粹的接分。
jixingzhong
2007-05-12
打赏
举报
回复
只用过 openssl,
Crypto++ 只是在当时了解了一下,
sammy 看看这些东东有没有帮助 ....
jixingzhong
2007-05-12
打赏
举报
回复
Crypto++首页上提供了Crypto++ User Guide这个入门指南的链接,这本指南属于一定要看的资料,不过可惜的是这也是找到的唯一一本指南了:(。User Guide上面的有一些例子,其中对AES用法的说明不太直接,而AES之类对称加密算法又比较常用,所以我这里写了一个AES的例子。
例子是直接用AES加密一个块,AES的数据块大小为128位,密钥长度可选择128位、192位或256位。直接用AES加密一个块很少用,因为我们平常都是加密任意长度的数据,需要选择CFB等加密模式。但是直接的块加密是对称加密的基础。
#include <iostream>
using namespace std;
#include <cryptopp/aes.h>
using namespace CryptoPP;
int main()
{
//AES中使用的固定参数是以类AES中定义的enum数据类型出现的,而不是成员函数或变量
//因此需要用::符号来索引
cout << "AES Parameters: " << endl;
cout << "Algorithm name : " << AES::StaticAlgorithmName() << endl;
//Crypto++库中一般用字节数来表示长度,而不是常用的字节数
cout << "Block size : " << AES::BLOCKSIZE * 8 << endl;
cout << "Min key length : " << AES::MIN_KEYLENGTH * 8 << endl;
cout << "Max key length : " << AES::MAX_KEYLENGTH * 8 << endl;
//AES中只包含一些固定的数据,而加密解密的功能由AESEncryption和AESDecryption来完成
//加密过程
AESEncryption aesEncryptor; //加密器
unsigned char aesKey[AES::DEFAULT_KEYLENGTH]; //密钥
unsigned char inBlock[AES::BLOCKSIZE] = "123456789"; //要加密的数据块
unsigned char outBlock[AES::BLOCKSIZE]; //加密后的密文块
unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零
memset( xorBlock, 0, AES::BLOCKSIZE ); //置零
aesEncryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); //设定加密密钥
aesEncryptor.ProcessAndXorBlock( inBlock, xorBlock, outBlock ); //加密
//以16进制显示加密后的数据
for( int i=0; i<16; 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=0; i<16; i++ ) { cout << plainText[i]; }
cout << endl;
return 0;
}
这里面有几个地方要注意一下:
AES并不是一个类,而是类Rijndael的一个typedef。
Rijndael虽然是一个类,但是其用法和namespace很像,本身没有什么成员函数和成员变量,只是在类体里面定义了一系列的类和数据类型(enum),真正能够进行加密解密的AESEncryption和AESDecryption都是定义在这个类内部的类。
AESEncryption和AESDecryption除了可以用SetKey()这个函数设置密钥,在构造函数中也能设置密钥,参数和SetKey()是一样的。
ProcessAndXorBlock ()可能会让人比较疑惑,函数名的意思是ProcessBlock and XorBlock,ProcessBlock就是对块进行加密或解密,XorBlock在各种加密模式中有用,这里我们不需要应用模式,因此把用来Xor 操作的xorBlock置为0,那么Xor操作就不起作用了。
jixingzhong
2007-05-12
打赏
举报
回复
Crypto++的安装
首先到www.cryptopp.com上下载最新版本的源代码,如果是windows版的,会得到一个VC的项目,直接用VC打开就可以编译了。这里建议大家使用最新版的C++编译器,因为诸如 VC6的编译器是不支持C++的标准的,很多符合C++标准的代码不能编译通过。编译的时间比较长,完成后会生成cryptlib.lib这个库文件。可以将Crypto++源文件的目录命名为cryptopp,拷贝到编译器的include目录(例如:C:\VS.NET\VC7\include),将 cryptlib.lib文件拷贝到编译器的lib目录。这样我们只需要说明链接cryptlib.lib即可。例如在VC7中在项目->属性- >链接器->命令行->附加选项中添加“cryptlib.lib”。
Hello World
现在写一个hello world程序看看能不能编译通过。
#include <iostream>
using namespace std;
#include <cryptopp/aes.h>
using namespace CryptoPP;
int main()
{
cout << "hello crypto++" << endl;
cout << "Aes block size is " << AES::BLOCKSIZE << endl;
return 0;
}
编译运行,一切OK,哈哈:D,可以用了。
jixingzhong
2007-05-12
打赏
举报
回复
http://maths.utime.cn:81/bbs/dispbbs.asp?boardid=25&id=5152&star=1&page=1
这里有使用的方法和一些简单的例子
jixingzhong
2007-05-12
打赏
举报
回复
http://www.cryptopp.com/ 找 User Guide
jixingzhong
2007-05-12
打赏
举报
回复
原来是 Crypto++ 的别名啊 ...
jixingzhong
2007-05-12
打赏
举报
回复
cryptopp?
几个经典加密库捉拿嘎没有这个吧?
healer_kx
2007-05-12
打赏
举报
回复
纯粹的接分。
VS2010编译
CryptoPP
代码
使用
使用
VS2010编译
CryptoPP
,然后新建测试工程验证通过
cryptopp
安装
使用
在Windows下,
Cryptopp
Library的安装
使用
教程。详细描述
cryptopp
的
使用
方法,可以用做
使用
文档进行参考。
cryptopp
的des加密解密
用vc6写的一个利用
cryptopp
类库做的一个des加密解密的例子,希望对正在
使用
cryptopp
类库朋友有所帮助。
cryptopp
32_修正
从其他地点下载的
cryptopp
32资源代码有问题,本人根据网上文章提示,修正了代码部分,提供给大家
使用
。
C++ 语言
64,661
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章