1. 程式人生 > >Crypto++ 入門(0) 簡介

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++

著名的密碼學演算法庫還有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語

大資料入門0linux的基本命令

最近研究大資料,將linux的基本命令整理如下: 1、設定圖形介面 vim /etc/inittab 2、清螢幕 clear 3、建立使用者,設定密碼 useradd test passwd test 4、切換使用者 su - test 5、檢視當前目錄, pwd, /h

Robot Framework基礎入門 1 簡介

                        Robot

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

大資料入門15hive簡介和配置

1、上傳檔案,解壓到app 下     tar  -zxvf  檔案   -C   app 2、不配置檔案的情況下    啟動 :./hive   (目錄:/home/admin/app/hive