Crypto++ 入門(0) 簡介
我最早接觸這個庫的時候,是因為手頭上有專案需要AES-256,而搜尋可以使用的AES-256的類搜的我頭昏腦漲。最後在國外網站上面看到有Crypto++這樣的一個密碼演算法庫,但限於當時水平有限,下載下來並不會使用。不過過了一段時間之後,通過自己琢磨和CSDN上的文章(http://blog.csdn.net/pepper/article/details/117514)的幫助,我終於明白瞭如何使用這個庫。在使用過程中我也解決了一些問題,一併在這裡寫出來供大家參考。
什麼是Crypto++
Crypto++是一個強大的密碼學庫,使用C++語言編寫,而且使用起來是免費的。Crypto++官網為
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++
著名的密碼學演算法庫還有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程式。
相關推薦
Crypto++ 入門(0) 簡介
我最早接觸這個庫的時候,是因為手頭上有專案需要AES-256,而搜尋可以使用的AES-256的類搜的我頭昏腦漲。最後在國外網站上面看到有Crypto++這樣的一個密碼演算法庫,但限於當時水平有限,下載下來並不會使用。不過過了一段時間之後,通過自己琢磨和CSD
webpack 入門(0)(官翻)
app 沒有 解決 ebp 回車 dir pts config 問題 0 建議最好全局先安裝一下webpack npm install webpack -g 1 新建一個文件夾,打開該文件夾,初始化package.json文件,安裝好webpack依賴 (都是基礎的li
Redis入門--(一)簡介NoSQL
集中 png 高效率 交互 問題 種類 gpo 效率 blog 1.什麽是NoSql? 2.為什麽需要NoSQL? 互聯網經歷了1.0和2.0的發展; web1.0 是早期新浪,雅虎等只能瀏覽,不能交互; 傳統關系型數據庫在應付web2.0這種動態網站的時候力
Python 學習入門(0)—— 簡明教程
Python 學習入門(0)—— 簡明教程 朋友問我怎麼能快速地掌握Python。 我想Python包含的內容很多,加上各種標準庫,拓展庫,亂花漸欲迷人眼,就想寫一個快速的Python教程,一方面 保持言語的簡潔,另一方面循序漸進,儘量讓沒有背景的讀者也可以從基礎開始學習。另外
Elastic Job入門(1) - 簡介
介紹 構建一般的業務系統來說,使用 Quartz或者 Spring Task即可基本滿足我們的 單體服用應用需要。然而隨著線上業務量的不斷髮展,這兩種定時任務已經日漸無法滿足我們的需求。一般,使用這兩種定時任務框架都會遇到如下的兩個痛點問題: 1、如果業務工程採用 叢集化的部署,可能會多
機器人運動學與動力學入門(序)簡介
該系列參考了CMU HowieChoset教授的授課視訊,有興趣的童鞋油管上自行觀看。 機器人動力學與運動學入門(零)簡介 機器人分很多種,這裡主要討論串聯機械臂的運動學與動力學。 機器人運動學(kinematics)主要研究機器人的運動情況,通俗來講就是研究機器人各個關節的位置
STM32 嵌入式學習入門(0)——C語言基礎複習
摘要 主要介紹了嵌入式程式設計中幾個常用,但軟體程式設計中用得不是很多的C語言知識。包括位操作、條件編譯、結構體和結構體指標、typedef宣告型別、以及extern變數宣告、static關鍵字等內容。 本文並沒有將相關C語
大資料入門(0)linux的基本命令
最近研究大資料,將linux的基本命令整理如下: 1、設定圖形介面 vim /etc/inittab 2、清螢幕 clear 3、建立使用者,設定密碼 useradd test passwd test 4、切換使用者 su - test 5、檢視當前目錄, pwd, /h
DWR3.0框架入門(3) —— ScriptSession的維護及優化
final comm scrip javax href run com stat creat 1.ScriptSession使用中存在的問題 在上一節實現了服務器的推送功能,但是根據 ScriptSession的生命周期我們可以得出以下幾點的問題:
MyBatis學習(一)簡介及入門案例
結果集 提交 ace 支持 nag 實例 exce 空間 cti 1.什麽是MyBatis? MyBatis是一個支持普通SQL查詢,存儲過程,和高級映射的優秀持久層框架。MyBatis去掉了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可
Oracle入門第一天(上)——簡介與安裝
http 添加數據 system 第一個 上網 操作 develop 窗口 style 一、Oracle介紹 Oracle 公司是全球最大的信息管理軟件及服務供應商,成立於1977年 Oracle 公司因其復雜的關系數據庫產品而聞名。Oracle的關系數據庫是
人工神經網絡入門(4) —— AFORGE.NET簡介
inpu 源代碼 double 庫文件 ive href 計算 super input 範例程序下載:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑問,可以先參考 FAQ 如果您未找到滿意的答案,可以在下面留言:)0 目錄人工
Python基礎(一)簡介&入門&條件&循環
優點 words ctr 查看 pytho type 運行速度 賦值 人工智 一、機器語言(解釋型語言和編譯型語言)介紹 1、編譯型語言:編譯型語言即把寫好的編程編譯成機器語言再執行,在運行之前一次性編譯,比如C、C++。 優點:運行速度快,缺點
區塊鏈快速入門(一)——區塊鏈簡介
更多 目前 驗證 action 依賴 無法解析 得到 分析 管理 區塊鏈快速入門(一)——區塊鏈簡介 一、區塊鏈簡介 1、分布式記帳技術簡介 2009年1月,基於區塊鏈結構的比特幣網絡悄然問世,其融合了現代密碼學和分布式網絡技術等重要成果。在比特幣出現後的數年裏,在純分布式
SpringBoot 2.0入門(4)
熱部署 1.什麼是熱部署 所謂的熱部署:比如專案的熱部署,就是在應用程式在不停止的情況下,實現新的部署 2.專案演示案例 @RestController @Slf4j public class IndexController { @Value("${itma}") pri
SpringBoot 2.0入門(3)
事物管理 1.Springboot整合事物管理 springboot預設整合事物,只主要在方法上加上@Transactional即可 2.SpringBoot分散式事物管理 使用springboot+jta+atomikos 分散式事物管理 2.1 新增配置檔案資訊 &l
SpringBoot 2.0入門(2)
SpringBoot 資料訪問 1.springboot整合使用JdbcTemplate 1.1 pom檔案引入 <parent> <groupId>org.springframework.boot</groupId> <arti
SpringBoot 2.0入門(1)
1.在eclipse中建立一個Maven工程 建立名為”helloworld” 型別為Jar工程專案。 2.pom檔案引入依賴 在pom中加入如下程式碼: <parent> <groupId>org.springframework.boo
大資料入門(15)hive簡介和配置
1、上傳檔案,解壓到app 下 tar -zxvf 檔案 -C app 2、不配置檔案的情況下 啟動 :./hive (目錄:/home/admin/app/hive