Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4627375
  • 博文数量: 671
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 7310
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-14 09:56
文章分类

全部博文(671)

文章存档

2011年(1)

2010年(2)

2009年(24)

2008年(271)

2007年(319)

2006年(54)

我的朋友

分类: C/C++

2008-08-24 11:49:37

Crypto++是一个C++编写的密码学类库。读过《过河卒》的朋友还记得作者的那个不愿意去微软工作的儿子吗,就是Crypto++的作者Wei Dai。
Crypto++是一个非常强大的密码学库,在密码学界很受欢迎,最初还是Rivest(RSA的R)门下的一个博士姐姐把这个库介绍给我的。虽然网络上可以找到很多密码学相关的代码和库,但是Crypto++有其明显的优点。主要是功能全,统一性好。例如椭圆曲线加密算法和AES在OpenSSL的crypto库中就还没最终完成,而在Crypto++中就支持的比较好。基本上密码学中需要的主要功能都可以在里面找得到。Crypto++是由标准的C++写成的,学习C++、密码学、网络安全都可以通过阅读Crypto++的源代码得到启发和提高。

Crypto++的安装
首先到上下载最新版本的源代码,如果是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
using namespace std;

#include
using namespace CryptoPP;

int main()
{
       cout << "hello crypto++" << endl;
       cout << "Aes block size is " << AES::BLOCKSIZE << endl;

 return 0;
}

编译运行,一切OK,哈哈:D,可以用了。

发表于 @ 2004年09月26日 20:36:00|评论(5 )|编辑

新一篇: Crypto++入门(1)-AES块加密 | 旧一篇: 初体验

评论

#ralph623 发表于2004-09-26 21:05:00  IP: 218.82.51.*
尝试过用这个库,应该说设计上的确不错,但是文档不敢恭维,有的时候让人摸不着头脑。在尝试用DES和RSA的时候,都遇到问题,尤其是用 .NET加密的东西怎么也解不出来,最后发现似乎是在Initial Vector方面有些不同。

笔者水平有限,当然无论如何,对于一个免费而有这么全面的库来说,不能要求面面俱到。如果大家能在这里交流并整理出一份简明的文档来,倒是算是为人类造福。
#Pepper 发表于2004-09-26 22:31:00  IP: 202.108.45.*
微软的产品都存在一个问题,那就是要受到美国法律的限制,不能向中国提供足够强度的安全产品。例如DES的密钥长度是56位的,而在IE中就缩水到40位。这带来一个副产品,就是不能遵守算法的标准,因此由.Net加密后的数据如果不进行特殊处理,只能由.Net解开。
我没有看过微软具体怎么减弱的安全性,但是可能的途径是将密钥的一部分填充固定的数据来减少密钥长度。例如只保留40位的原始密钥数据,这样的话普通的PC机也可以很容易的暴力破解其加密了。

#forevermian 发表于2004-10-04 12:58:00  IP: 211.83.152.*
大哥,谢谢你提供这么好的东西啊。。
#fms365 发表于2004-10-26 22:17:00  IP: 218.22.193.*
老大,在vc6中如何安装?
#prefix 发表于2007-09-11 12:58:59  IP: 59.35.69.*
这个库我尝试了几个版本,不知为何有的版本不能静态编译,有的版本能编译,但是和自己的工程一起编译的时候却不能编译,而编译成dll之后,却有的类能使用,有的类一声明就编译不过去,说缺少函数体,最后尝试了551版本,能编译成dll,也能正常include了,但是发现使用起来很复杂……研究了一整天,还是没有发现诀窍…………:(
阅读(1574) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~