Crypto ++ (cryptopp) 与加密 (1)
加密技术
加密技术用于提供以下功能:
• |
机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。 |
• |
数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。 |
• |
身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。 |
技术选择
• |
如果需要使用一种方法来验证数据在传输过程中没有被篡改,请使用哈希值。 |
• |
如果要证明实体知道机密但不来回发送机密,或者想使用简单的哈希值以防止在传输过程中被截获,请使用加密的哈希值。 |
• |
如果要隐藏通过不安全的媒介发送的数据或者要永久性保留数据,请使用加密。 |
• |
如果要验证声称是公钥所有者的人员的身份,请使用证书。 |
• |
如果双方事先共享密钥,请使用对称加密以提高速度。 |
• |
如果想通过不安全的媒介安全地交换数据,请使用非对称加密。 |
• |
如果要进行身份验证和实现不可否认性,请使用数字签名。 |
• |
使用 Salt 值(使用加密技术生成的随机数)以防范字典攻击。 |
openssl 的crypto程序库是目前用的最广泛的。可以到openssl.org 去下载最新的版本,目前应该是 0.98j。 这个网上的资料就比较多了,但是 openssl 依然没有提供 椭圆曲线加密算法和AES的实现。改库编译出来应该是有一个可执行文件,2个动态库。实际上我在使用vc8编译时候还是会有小麻烦的,按照install的指导来配置和编译,在最新的0.98j版本上是过不去的。通过修改生成的makefile可以把相关的路径修正过来,但在其源码中有许多地方vc8的编译器识别出错误字符。我尝试着修改了几处,但是要改的实在太多了,作罢。摘自msdn。
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 是容器。 见下面的例子:
有了上面这部分io使用基础,那么使用该库就少了许多麻烦。剩余部分待续。
posted on 2009-01-26 20:00 康国庆--thinkinlove 阅读(2228) 评论(0) 编辑 收藏 举报