cryptopp的使用

SammyLan 2007-05-12 07:02:05
有谁了解cryptopp库的
源码中的示例有点乱,而且时间比较急,暂时不想看那些示例
如果有谁比较熟悉的
麻烦简单说一下使用该库需要做什么样的初始化
最好能给个简单的使用MD5,RSA,DES算法的例子
谢谢了
...全文
2472 18 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
纯粹的接分。

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧