Crypto++ 入门(0) 简介


  我最早接触这个库的时候,是因为手头上有项目需要AES-256,而搜索可以使用的AES-256的类搜的我头昏脑涨。最后在国外网站上面看到有Crypto++这样的一个密码算法库, 但限于当时水平有限,下载下来并不会使用。不过过了一段时间之后,通过自己琢磨和CSDN上的文章(http://blog.csdn.net /pepper/article/details/117514)的帮助,我终于明白了如何使用这个库。在使用过程中我也解决了一些问题,一并在这里写出 来供大家参考。

 

什么是Crypto++

Crypto++是一个强大的密码学库,使用C++语言编写,而且使用起来是免费的。Crypto++官网为http://www.cryptopp.com/,截止至本文写作时,最新版的为5.62版。

5.62版本支持的密码学算法如下(摘自其官网):

algorithm type

name

authenticated encryption schemes

GCM, CCM, EAX

high speed stream ciphers

Panama, Sosemanuk, Salsa20, XSalsa20

AES and AES candidates

AES (Rijndael), RC6, MARS, Twofish, Serpent, CAST-256

other block ciphers

IDEA, Triple-DES (DES-EDE2 and DES-EDE3), Camellia, SEED, RC5, Blowfish, TEA, XTEA, Skipjack, SHACAL-2

block cipher modes of operation

ECB, CBC, CBC ciphertext stealing (CTS), CFB, OFB, counter mode (CTR)

message authentication codes

VMAC, HMAC, GMAC (GCM), CMAC, CBC-MAC, DMAC, Two-Track-MAC

hash functions

SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, and SHA-512), SHA-3, Tiger, WHIRLPOOL, RIPEMD-128, RIPEMD-256, RIPEMD-160, RIPEMD-320

public-key cryptography

RSA, DSA, ElGamal, Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC, LUCELG, DLIES (variants of DHAES), ESIGN

padding schemes for public-key systems

PKCS#1 v2.0, OAEP, PSS, PSSR, IEEE P1363 EMSA2 and EMSA5

key agreement schemes

Diffie-Hellman (DH), Unified Diffie-Hellman (DH2), Menezes-Qu-Vanstone (MQV), LUCDIF, XTR-DH

elliptic curve cryptography

ECDSA, ECNR, ECIES, ECDH, ECMQV

insecure or obsolescent algorithms retained for backwards compatibility and historical value

MD2, MD4, MD5, Panama Hash, DES, ARC4, SEAL 3.0, WAKE-OFB, DESX (DES-XEX3), RC2, SAFER, 3-WAY, GOST, SHARK, CAST-128, Square

Crypto++ 5.62下载地址为:http://www.cryptopp.com/cryptopp562.zip

 

为什么选择Crypto++

著名的密码学算法库还有OpenSSL(http://www.openssl.org)。OpenSSL为网络通信提供安全及数据完整性的一种安 全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。值得注意的 是,OpenSSL采用C语言作为开发语言。下面将其支持的密码算法列举如下:

来源http://www.openssl.org/docs/crypto/crypto.html

 

algorithm type

name

SYMMETRIC CIPHERS

blowfish, cast, des, idea, rc2, rc4, rc5

PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT

dsa, dh, rsa

CERTIFICATES

x509, x509v3

AUTHENTICATION CODES, HASH FUNCTIONS

hmac, md2, md4, md5, mdc2, ripemd, sha

AUXILIARY FUNCTIONS

err, threads, rand, OPENSSL_VERSION_NUMBER

INPUT/OUTPUT, DATA ENCODING

asn1, bio, evp, pem, pkcs7, pkcs12

INTERNAL FUNCTIONS

bn, buffer, lhash, objects, stack, txt_db

 

 

通过对比可以发现,OpenSSL支持的东西较Crypto++相对较少(但我估计上表不全,因为能够查到用OpenSSL写AES的程序,而上表 中没有列出。作者注)。对于一些算法,比如MD5和SHA-1,已经被王小云教授破解。2004年8月17日的美国加州圣巴巴拉的国际密码学会议 (Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。2005年2月,王小云教授又破解了另一国际密码SHA-1。换句话说,王小云的研究成 果表明了从理论上讲电子签名可以伪造,必须及时添加限制条件,或者重新选用更为安全的密码标准,以保证电子商务的安全。2009年,冯登国、谢涛二人利用 差分攻击,将MD5的碰撞算法复杂度从王小云的2^42进一步降低到2^21,极端情况下甚至可以降低至2^10。仅仅2^21的复杂度意味着即便是在 2008年的计算机上,也只要几秒便可以找到一对碰撞。(作者曾经与王教授有过短暂交流,当时的心情是相当激动的。)

据此,我们在实际使用过程中,尽量不要去使用MD5和SHA-1,而是过渡到SHA-2之上,因为这个在理论上面还是安全的。作为学习信息安全的我们,应该有这样的意识。

通过上述分析,我在平时的软件开发之中选择了Crypto++。

 

Crypto++对使用者有什么要求

在我看来,Crypto++的使用者,应该具有基础的密码学知识,并且对其想要实现的算法做过了解,明白算法大体上是什么样的。在语言方面, Crypto++的使用者应该对C++有着一定的了解,因为这个库是按着C++标准来开发的,有一些模板等知识需要掌握。如果对后一条标准,想要提出一个 大概的水平划分,我想应该是使用者能够独立编写较为复杂的Win32控制台程序或者MFC程序。

转自:http://blog.csdn.net/interwish/article/details/8741303


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM