Tao & Zen

Soli Deo Gloria!

导航

Crypto ++ (cryptopp) 与加密 (1)

加密技术

加密技术用于提供以下功能:

机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。

数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。

身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。

技术选择

如果需要使用一种方法来验证数据在传输过程中没有被篡改,请使用哈希值。

如果要证明实体知道机密但不来回发送机密,或者想使用简单的哈希值以防止在传输过程中被截获,请使用加密的哈希值。

如果要隐藏通过不安全的媒介发送的数据或者要永久性保留数据,请使用加密。

如果要验证声称是公钥所有者的人员的身份,请使用证书。

如果双方事先共享密钥,请使用对称加密以提高速度。

如果想通过不安全的媒介安全地交换数据,请使用非对称加密。

如果要进行身份验证和实现不可否认性,请使用数字签名。

使用 Salt 值(使用加密技术生成的随机数)以防范字典攻击。

摘自msdn。

openssl 的crypto程序库是目前用的最广泛的。可以到openssl.org 去下载最新的版本,目前应该是 0.98j。 这个网上的资料就比较多了,但是 openssl 依然没有提供 椭圆曲线加密算法和AES的实现。改库编译出来应该是有一个可执行文件,2个动态库。实际上我在使用vc8编译时候还是会有小麻烦的,按照install的指导来配置和编译,在最新的0.98j版本上是过不去的。通过修改生成的makefile可以把相关的路径修正过来,但在其源码中有许多地方vc8的编译器识别出错误字符。我尝试着修改了几处,但是要改的实在太多了,作罢。

Openssl 提供了许多版本的下载,和不同平台、不同编译器的下载。

 

crypto++ 是另一好的选择。Crypto++有其明显的优点,主要是功能全,统一性好,包括openssl中缺少的AES。

看其名字就知道是用c++写就的。代码最新版本5.5.2,代码中大量的使用了模板技术,作者是戴伟。

Wei Dai's official Crypto++ web site [www.cryptopp.com

注:该站需要爬墙。。。

源代码里面提供了vc8 以及gcc 等主流编译器的编译方式。而且提供了静态库和动态库的选择,这个代码在vc下是静态链接运行时库的,

也就是MT或MTd 这样编译下来的lib 或是dll 都有45MB之多,还好,可以使用静态联入的方式。

 网上的资料实在是不多,代码中有了部分示例程序。

库中的IO部分设计的很有意思,有点像JAVA中的IO流,使用时可以 一直new下去,

(虽然java的io流部分被许多教材引为反模式) 。

Crypto++的基础设施(IO部分)

Code

 像上面这样,source是源,源有很多种比如文件,网络 该库支持跨平台网络通讯的哦!

filter 是过滤器,也可以成为转换器,可以将一个格式转成另一种,等等。。

sink 是容器。 见下面的例子:

Code

 

 有了上面这部分io使用基础,那么使用该库就少了许多麻烦。剩余部分待续。

posted on 2009-01-26 20:00  康国庆--thinkinlove  阅读(2156)  评论(0编辑  收藏  举报