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