版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Crypto++入門-安裝Crypto++是一種C++編寫的密碼學類庫。讀過《過河卒》的朋友還記得作者的那個不樂意去微軟工作的兒子嗎,就是Crypto++的作者WeiDai。Crypto++是一種非常強大的密碼學庫,在密碼學界很受歡迎,最初還是Rivest(RSA的R)門下的一種博士姐姐把這個庫簡介給我的。雖然網絡上可以找到諸多密碼學有關的代碼和庫,不過Crypto++有其明顯的長處。重要是功能全,統(tǒng)一性好。例如橢圓曲線加密算法和AES在OpenSSL的crypto庫中就還沒最終完畢,而在Crypto++中就支持的比很好?;旧厦艽a學中需要的重要功能都可以在里面找得到。Crypto++是由原則的C++寫成的,學習C++、密碼學、網絡安全都可以通過閱讀Crypto++的源代碼得到啟發(fā)和提高。Crypto++的安裝首先到.com上下載最新版本的源代碼,假如是windows版的,會得到一種VC的項目,直接用VC打開就可以編譯了。這里提議大家使用最新版的C++編譯器,由于諸如VC6的編譯器是不支持C++的原則的,諸多符合C++原則的代碼不能編譯通過。編譯的時間比較長,完畢后會生成cryptlib.lib這個庫文獻??梢詫rypto++源文獻的目錄命名為cryptopp,拷貝到編譯器的include目錄(例如:C:\VS.NET\VC7\include),將cryptlib.lib文獻拷貝到編譯器的lib目錄。這樣我們只需要闡明鏈接cryptlib.lib即可。例如在VC7中在項目->屬性->鏈接器->命令行->附加選項中添加“cryptlib.lib”。HelloWorld目前寫一種helloworld程序看看能不能編譯通過。#include<iostream>usingnamespacestd;#include<cryptopp/aes.h>usingnamespaceCryptoPP;intmain(){cout<<"hellocrypto++"<<endl;cout<<"Aesblocksizeis"<<AES::BLOCKSIZE<<endl;return0;}編譯運行,一切OK,哈哈:D,可以用了。lib和dll文獻的區(qū)別和聯(lián)絡.dll是在你的程序運行的時候才連接的文獻,因此它是一種比較小的可執(zhí)行文獻格式,.dll尚有其他的文獻格式如.ocx等,所有的.dll文獻都是可執(zhí)行。.lib是在你的程序編譯連接的時候就連接的文獻,因此你必須告知編譯器連接的lib文獻在那里。一般來說,與動態(tài)連接文獻相對比,lib文獻也被稱為是靜態(tài)連接庫。當你把代碼編譯成這幾種格式的文獻時,在后來他們就不也許再被更改。假如你想使用lib文獻,就必須:1包括一種對應的頭文獻告知編譯器lib文獻里面的詳細內容2設置lib文獻容許編譯器去查找已經編譯好的二進制代碼假如你想從你的代碼分離一種dll文獻出來替代靜態(tài)連接庫,仍然需要一種lib文獻。這個lib文獻將被連接到程序告訴操作系統(tǒng)在運行的時候你想用到什么dll文獻,一般狀況下,lib文獻里有對應的dll文獻的名字和一種指明dll輸出函數(shù)入口的次序表。假如不想用lib文獻或者是沒有l(wèi)ib文獻,可以用WIN32API函數(shù)LoadLibrary、GetProcAddress。實際上,我們可以在VisualC++IDE中以二進制形式打開lib文獻,大多狀況下會看到ASCII碼格式的C++函數(shù)或某些重載操作的函數(shù)名字。一般我們最重要的有關lib文獻的麻煩就是出現(xiàn)unresolvedsymble此類錯誤,這就是lib文獻連接錯誤或者沒有包括.c、.cpp文獻到工程里,關鍵是假如在C++工程里用了C語言寫的lib文獻,就必需要這樣包括:extern"C"{#include"myheader.h"}這是由于C語言寫的lib文獻沒有C++所必須的名字破壞,C函數(shù)不能被重載,因此連接器會出錯C語言中有某些函數(shù)不需要進行編譯,有某些函數(shù)也可以在多種文獻中使用。一般來說,這些函數(shù)都會執(zhí)行某些原則任務,如數(shù)據(jù)庫輸入/輸出操作或屏幕控制等。可以事先對這些函數(shù)進行編譯,然后將它們放置在某些特殊的目的代碼文獻中,這些目的代碼文獻就稱為庫。庫文獻中的函數(shù)可以通過連接程序與應用程序進行連接。這樣就不必在每次開發(fā)程序時都對這些通用的函數(shù)進行編譯了。不一樣類型的應用程序將會使用不一樣的函數(shù)庫。例如:libdbm庫中組包括了對數(shù)據(jù)庫文獻進行訪問的dbm函數(shù),需要對數(shù)據(jù)庫進行操作的程序就會與該庫進行連接。數(shù)學應用程序將使用數(shù)學庫libm,X-Windows應用程序將使用Xlib庫,libX11。此外,所有的程序都將使用原則的C函數(shù)庫。libc,該庫中包括了諸好內存管理或輸入輸出操作的基本函數(shù),這些庫都寄存在/usr/lib這些系統(tǒng)公用的目錄中,系統(tǒng)中的任何顧客都可以運用這些庫。當然顧客也可以建立自己專用的庫函數(shù),供自己或其他指定的人員使用。
庫可以有三種使用的形式:靜態(tài)、共享和動態(tài)。靜態(tài)庫的代碼在編譯時就已連接到開發(fā)人員開發(fā)的應用程序中,而共享庫只是在程序開始運行時才載入,在編譯時,只是簡樸地指定需要使用的庫函數(shù)。動態(tài)庫則是共享庫的另一種變化形式。動態(tài)庫也是在程序運行時載入,但與共享庫不一樣的是,使用的庫函數(shù)不是在程序運行開始,而是在程序中的語句需要使用該函數(shù)時才載入。動態(tài)庫可以在程序運行期間釋放動態(tài)庫所占用的內存,騰出空間供其他程序使用。由于共享庫和動態(tài)庫并沒有在程序中包括庫函數(shù)的內容,只是包括了對庫函數(shù)的引用,因此代碼的規(guī)模比較小。
Crypto++庫在VS中的使用——RSA加解密一.下載Crypto++LibraryCrypto++Library的官方網:二.建立自己使用的Crypto++Library由于從官方網下載的Crypto++庫是開源的,只有源文獻和幾種可以生成lib、dll的工程,以及一種使用的例子工程,因此但愿生成自己建的工程能使用的SDK。1.編譯鏈接生成cryptlib.lib打開cryptest.sln,分別在Debug模式和Release模式下編譯鏈接cryptlib工程,成功后會在cryptopp54\Win32\output\debug和cryptopp54\Win32\output\release下生成cryptlib.lib文獻。作者當時用的是Crypto++5.4版本。Build時措施是,右擊SolutionExplorer中的cryptlib工程,單擊build。第一次時它會報錯說“d:\cryptopp54\adler32.cpp(3):fatalerrorC1033:cannotopenprogramdatabase'd:\cryptopp54\win32\cryptlib\debug\vc80.idb'”,沒關系,按這樣再build一次,就可以build成功了。2.建立Crypto++SDK在C:\ProgramFiles\中新建文獻夾,取名“CryptoPP”,里面新建文獻夾“include”、“l(fā)ib”,在“l(fā)ib”中新建文獻夾“debug”、“release”。將Crypto++庫中的所有頭文獻復制到“include”文獻夾中,再將上面生成的兩個cryptlib.lib分別復制到“debug”和“release”中。三.RSA加解密1.在VS中新建Win32ConsoleApplication工程,建立空的工程。完畢后新建文獻main.cpp,里面源碼如下:#include"randpool.h"#include"rsa.h"#include"hex.h"#include"files.h"#include<iostream>usingnamespacestd;usingnamespaceCryptoPP;#pragmacomment(lib,"cryptlib.lib")////函數(shù)申明//voidGenerateRSAKey(unsignedintkeyLength,constchar*privFilename,constchar*pubFilename,constchar*seed);stringRSAEncryptString(constchar*pubFilename,constchar*seed,constchar*message);stringRSADecryptString(constchar*privFilename,constchar*ciphertext);RandomPool&GlobalRNG();////主程序//voidmain(){charpriKey[128]={0};charpubKey[128]={0};charseed[1024]={0};//生成RSA密鑰對strcpy(priKey,"pri");//生成的私鑰文獻strcpy(pubKey,"pub");//生成的公鑰文獻strcpy(seed,"seed");GenerateRSAKey(1024,priKey,pubKey,seed);//RSA加解密charmessage[1024]={0};cout<<"OriginText:\t"<<"HelloWorld!"<<endl<<endl;strcpy(message,"HelloWorld!");stringencryptedText=RSAEncryptString(pubKey,seed,message);//RSA加密cout<<"EncryptedText:\t"<<encryptedText<<endl<<endl;stringdecryptedText=RSADecryptString(priKey,encryptedText.c_str());//RSA解密cout<<"DecryptedText:\t"<<decryptedText<<endl<<endl;}////生成RSA密鑰對//voidGenerateRSAKey(unsignedintkeyLength,constchar*privFilename,constchar*pubFilename,constchar*seed){RandomPoolrandPool;randPool.Put((byte*)seed,strlen(seed));RSAES_OAEP_SHA_Decryptorpriv(randPool,keyLength);HexEncoderprivFile(newFileSink(privFilename));priv.DEREncode(privFile);privFile.MessageEnd();RSAES_OAEP_SHA_Encryptorpub(priv);HexEncoderpubFile(newFileSink(pubFilename));pub.DEREncode(pubFile);pubFile.MessageEnd();}////RSA加密//stringRSAEncryptString(constchar*pubFilename,constchar*seed,constchar*message){FileSourcepubFile(pubFilename,true,newHexDecoder);RSAES_OAEP_SHA_Encryptorpub(pubFile);RandomPoolrandPool;randPool.Put((byte*)seed,strlen(seed));stringresult;StringSource(message,true,newPK_EncryptorFilter(randPool,pub,newHexEncoder(newStringSink(result))));returnresult;}////RSA解密//stringRSADecryptString(constchar*privFilename,constchar*ciphertext){FileSourceprivFile(privFilename,true,newHexDecoder);RSAES_OAEP_SHA_Decryptorpriv(privFile);stringresult;StringSource(ciphertext,true,newHexDecoder(newPK_DecryptorFilter(GlobalRNG(),priv,newStringSink(result))));returnresult;}////定義全局的隨機數(shù)池//RandomPool&GlobalRNG(){staticRandomPoolrandomPool;returnrandomPool;}2.設置工程屬性選擇工程屬性(Alt+F7):(1)“ConfigurationProperties”→“C/C++”→“General”,右邊的“AdditionalIncludeDirectories”設置為上面建好的Crypto++SDK的Include文獻夾,“C:\ProgramFiles\CyptoPP\include”;(2)“ConfigurationProperties”→“Linker”→“General”,右邊的“AdditionalLibraryDirectories”設置為上面建好的Crypto++SDK的Lib\Debug文獻夾,“C:\ProgramFiles\CyptoPP\lib\debug”(Release模式下對應著Release文獻夾);(3)“ConfigurationProperties”→“C/C++”→“CodeGeneration”,右邊的“RuntimeLibrary”設置為“Multi-threadedDebug(/MTd)”(Release模式下對應著“Multi-threaded(/MT)”)3.運行程序(Ctrl+F5)正常運行的輸出成果為:OriginText:HelloWorld!EncryptedText:79C72A482482EF45111F9692AB735ECF72329ECB26292D2B26374824E0E35D24A63CB03B867DD2C70B001FD4B2B33FBC984BD229A5226F284BA6803229E8351372C5E28E8BEBA2A94E7CF61A8A162F0BA2F3E0C35D26842D92EC4866D25E6BF878743E48184D9F6FF9BA690F953568D017C02D540DecryptedText:HelloWorld!假如上面的第(3)步沒有設置則會出現(xiàn)如下鏈接錯誤:cryptlib.lib(randpool.obj):errorLNK:"public:__thiscallstd::basic_string<char,structstd::char_traits<char>,classstd::allocator<char>>::basic_string<char,structstd::char_traits<char>,classstd::allocator<char>>(charconst*)"(??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z)alreadydefinedinmsvcprtd.lib(MSVCP80D.dll)說在msvcprtd.lib和MSVCRTD.lib中已經定義過。Crypto++使用經驗總結?Crypto++使用經驗總結Crypto++是一套有關應用密碼學的類庫,提供了散列(MD5、SHA)、數(shù)據(jù)加密(DES、AES)、數(shù)字簽名(RSA、橢圓曲線簽名算法ECDSA)等諸多有用的算法,算法安全性已經通過FIPS140-2()驗證。?下面是某些使用中的總結:?一、將一種緩沖區(qū)編碼1.首先申明一種字符串來寄存編碼的成果stringstr;2.接著申明一種編碼器(HexEncoder可替代為Base64Encoder等)對象,并通過StringSink類關聯(lián)兩者HexEncoderencoder(newStringSink(str));3.將數(shù)據(jù)放入編碼器中bytebuf[1024];...encoder.Put(buf,sizeof(buf));SetDlgItemText(IDC_EDIT_TEST,spk.data());4.調用MessageEnd函數(shù)結束編碼encoder.MessageEnd();?二、BufferedTransformation、BlockTransformation、StreamTransformation、HashTransformation這幾種類都是對輸入的緩沖區(qū)進行某種運算后輸出,不過有某些差異1.BufferedTransformation:是對緩沖區(qū)進行某種變換,這種變換式可以還原的2.BlockTransformation:基本與BufferedTransformation相似,不一樣之處在于它是以塊為單位3.StreamTransformation:與BufferedTransformation差不多相似,不一樣之處在于是以流式方式,如網絡套結字4.HashTransformation:是對緩沖區(qū)計算哈希值,這種變換是不可還原的?三、Sink類及其派生類的作用Sink類及其派生類,如下簡稱Sink類,它們的作用是在真實的數(shù)據(jù)和緩沖區(qū)變換類之間起一種連接的作用,Sink類由BufferedTransformation派生,不過不能產生任何輸入輸出,所有對它的操作都是對它所指向的數(shù)據(jù)的操作。每個Sink類必須與一種正式的數(shù)據(jù)關聯(lián)起來。1.ArraySink:操作字節(jié)數(shù)據(jù)2.StringSink:操作字符串數(shù)據(jù)3.ArrayXorSink:操作字節(jié)數(shù)據(jù),不過會對緩沖區(qū)進行異或運算4.FileSink:操作文獻?四、SecByteBlock和ByteQueue兩個類都描述了一種字節(jié)為單位的緩沖區(qū),所不一樣的是SecByteBlock所分派的緩沖區(qū)時持續(xù)的,而ByteQueue則是用鏈表實現(xiàn)的1.使用SecBlock類可以動態(tài)分派指定字節(jié)數(shù)的內容,并在類析構時自動釋放,并且可以作為指定類的指針使用,有些方面類似于auto_ptr?五、橢圓曲線加密(ECIES)、簽名(ECDSA)算法1.ECIES構造措施AutoSeededRandomPoolrng;//隨機數(shù)產生器ECIES::Decryptorcpriv(rng,ASN1::sect193r1());//私鑰,自己保留ECIES::Encryptorcpub(cpriv);//公鑰,提供應顧客注意:橢圓曲線加密算法是擁有公鑰的人將數(shù)據(jù)加密后,密文發(fā)送給自己,自己來解密,因此不合用于注冊碼的生成2.ECDSA如下描述一種自定義的橢圓曲線的構造過程(以GF(p)上的橢圓曲線為例),參數(shù)可從如下網址得到//Integermodulus("7569");//a、b為橢圓曲線參數(shù)Integera("659942,b7261b,249174,c86bd5,e2a65b,45fe07,37d110h");Integerb("3ece7d,09473d,666000,5baef5,d4e00e,30159d,2df49ah");//計算基點G的兩個參數(shù)x、yIntegerx("25dd61,4c0667,81abc0,fe6c84,fefaa3,858ca6,96d0e8h");Integery("4e2477,05aab0,b3497f,d62b5e,78a531,446729,6c3fach");Integerr("151");Integerk(2);//私有密鑰Integerd("345");?//橢圓曲線ECPec(modulus,a,b);//P為基點GECP::PointP(x,y);//計算基點GP=ec.Multiply(k,P);//Q為公開密鑰ECP::PointQ(ec.Multiply(d,P));ECIES::Decryptorcpriv(ec,P,r,d);ECIES::Encryptorcpub(cpriv);ECDSA::Signerspriv(cpriv);ECDSA::Verifierspub(spriv);ECDH::Domainecdhc(ec,P,r,k);ECMQV::Domainecmqvc(ec,P,r,k);3.橢圓曲線上的點的階(Orderofpoint)橢圓曲線的簽名的長度是由基點P的階的長度決定的,和素數(shù)的長度無關。因此橢圓曲線可以選用素數(shù)較大的類型。4.橢圓曲線的密鑰私鑰是一種大數(shù),而公鑰則是一種點密碼類庫Crypto++™Library5.1的研究與應用密碼類庫Crypto++?Library5.1的研究與應用摘要引言在計算機被廣泛應用的信息時代,信息自身就是時間,就是財富。大量信息用數(shù)據(jù)形式寄存在計算機系統(tǒng)里。信息的傳播則通過公共信道。這些計算機系統(tǒng)和公共信道是不設防的,是很脆弱的,輕易受到襲擊和破壞,信息的丟失不輕易被發(fā)現(xiàn),并且后果是極其嚴重。怎樣保護信息的安全已不僅僅是軍事和政府部門感愛好的問題,其他企事業(yè)單位也愈感迫切。由于在網絡化的今天,計算機犯罪每年使他們遭受的損失極其巨大,并且還在發(fā)展中。密碼是有效并且可行的保護信息安全的措施。伴隨計算機網絡不停滲透到各個領域,密碼學的應用也伴隨擴大。數(shù)字簽名、身份鑒別、等都是由密碼學派生出來的新技術和應用。目前開放源代碼的加密庫中,密碼類庫Crypto++是比較流行的,目前的最高版本為Crypto++?Library5.1,它實現(xiàn)了多種公開密鑰算法、對稱加密算法、數(shù)字簽名算法、信息摘要算法以及其有關的其他算法等等,Crypto++?Library5.1幾乎包括了目前所有安全算法庫,對密碼類庫Crypto++?Library5.1的研究與應用對計算機網絡安全的研究與發(fā)展有重大的實際意義。(一)Crypto++?Library5.1規(guī)定的密碼知識Crypto++?Library5.1規(guī)定什么樣的密碼知識基礎呢,諸多初學者都想懂得這個問題。然而當你提出一種基礎的問題在別處找到答案,你會發(fā)現(xiàn)這對你沒有多大用處,由于越來越多純熟使用這個類庫包的人不僅僅是考慮挑戰(zhàn)安全問題。該密碼庫的建立是假設你對密碼術語已經有一定的理解的基礎上的,假如你已經到達這一點,你可以進行某些比較基礎的研究,到那時你會發(fā)現(xiàn)雖然在最有利的狀況下建立一種安全體系也是很困難的。假如你可以克服這些困難去研究這方面知識,你可以從某些網站獲得比較專業(yè)的協(xié)助。Crypto++庫包具有大量的算法,不過它們對顧客來說并不總是顯而易見的,下面推薦某些算法,由于這些算法不僅用得很廣,并且被公認比較安全的,并且是免費的。1、分組密碼:DES-EDE3,Blowfish,Rijndael2、序列密碼:3、Hash函數(shù):SHA14、消息認證碼:HMAC/SHA15、公鑰加密:RSA/OAEP/SHA16、簽名:RSA/PKCS1v15/SHA1,DSA,Generalized-DSA/SHA17、密鑰協(xié)議:DH8、隨機數(shù)產生器:RandomPool,AutoSeededRandomPool(二)密碼類庫Crypto++?Library5.1的內容Crypto++庫是一種用c++編寫的密碼類庫,是一種自由軟件。Crypto++?Library5.1于3月22日公布,是目前最高的版本,該版本加入了除了作者WeiDai以外的此外某些作者的代碼重新包裝成類,類庫里重要包括下列的內容:1、用抽象類定義API類的繼承層次2、高級加密原則AES(AdvancedEncryptionStandard)Rijndael和AES候選算法:RC6,MARS,Twofish,Serpent,CAST-2561997年4月15日美國國標技術研究所NIST發(fā)起征集高級加密原則AES算法的活動,目的是為確定一種安全性能更好的分組密碼算法用于取代DES,AES的基本規(guī)定是比三重DES快并且至少與DES同樣安全,分組長度為128位,密鑰長度為128位,192位或256位.11月26日,NIST正式公布高級加密原則AES,AES的安全性能是良好的,通過數(shù)年來的分析和測試,至今沒有發(fā)現(xiàn)AES的明顯缺陷,也沒有找到明顯的安全漏洞.AES可以抵御目前已知的多種襲擊措施的襲擊。3、對稱分組密碼:IDEA,DES,Triple-DES(DES-EDE2andDES-EDE3),DESX(DES-XEX3),RC2,RC5,Blowfish,Diamond2,TEA,SAFER,3-WAY,GOST,SHARK,CAST-128,Square,Skipjack。分組密碼又稱為秘密鑰密碼或對稱密碼。運用分組密碼對明文進行加密時,首先需要對明文進行分組,每組的長度都相似,然后對每組明文分別加密得到等長的密文,分組密碼的特點是加密密鑰與解密密鑰相似。分組密碼的安全性應當重要依賴于密鑰,而不依賴于對加密算法和解密算法的保密。因此,分組密碼的加密和解密算法可以公開。4、一般的密碼模式:ECB,CBC,CBCciphertextstealing(CTS),CFB,OFB,countermode(CTR)。電子密本(ECB),密碼分組鏈接(CBC),輸出反饋(OFB)和密文反饋(CFB)5、序列密碼:Panama,ARC4,SEAL,WAKE,WAKE-OFB,BlumBlumShub序列密碼可以認為是來源于20世紀代的Vernam體系,當Vernam體制中的密鑰序列是隨機的(0,1)時,他就是“一次一密“密碼體制。Shannon已經證明了“一次一密“密碼體制在理論上是不可破譯的。由于隨機的密鑰序列產生、存儲以及分派等方面存在一定的困難,Vernam體制在當時并沒有得到廣泛的應用。伴隨微電子技術和數(shù)學理論的發(fā)展與完善,基于偽隨機序列的序列密碼得到了長足的發(fā)展和應用。在序列密碼中,加密和解密所用的密鑰都是偽隨機序列,偽隨機序列的產生比較輕易并且有比較成熟的數(shù)學理論工具,目前,序列密碼是世界各國的軍事和外交等領域中使用的重要密碼體制之一。6、公鑰密碼:RSA,DSA,ElGamal,Nyberg-Rueppel(NR),Rabin,Rabin-Williams(RW),LUC,LUCELG,DLIES(variantsofDHAES),ESIGN在公鑰密碼體制中加秘密鑰和解密密鑰是不一樣樣的,加密密鑰可以公開傳播而不危及密碼體制的安全性。RSA公鑰密碼體制的安全性是基于大整數(shù)的素分解問題的難解性,7、公鑰密碼系統(tǒng)補?。篜KCS#1v2.0,OAEP,PSSR,IEEEP1363EMSA28、密鑰協(xié)商方案:Diffie-Hellman(DH),UnifiedDiffie-Hellman(DH2),Menezes-Qu-Vanstone(MQV),LUCDIF,XTR-DH9、橢圓曲線密碼:ECDSA,ECNR,ECIES,ECDH,ECMQV9、單向hash函數(shù):hash函數(shù)是一種將一種任意長度的消息(message)壓縮為某一固定長度的消息摘要(messagedigest)的函數(shù)。hash函數(shù)可以用于數(shù)字簽名和消息的完整性檢測。SHA-1,:安全hash算法SHAMD2,MD4,MD5,HAVAL,RIPEMD-160,Tiger,SHA-2(SHA-256,SHA-384,andSHA-512),Panama11、消息認證碼(MAC):MD5-MAC,HMAC,XOR-MAC,CBC-MAC,DMAC12、基于密碼構造的Hash函數(shù):Luby-Rackoff,MDC13、偽隨機數(shù)發(fā)生器(PRNG):ANSIX9.17appendixC,PGP'sRandPool14、passwordbasedkeyderivationfunctions:PBKDF1andPBKDF2fromPKCS#515、壓縮和解壓算法16、大整數(shù)和多項式迅速精確算法17、有限范圍內的算法包括GF(p)和GF(2^n)18、素數(shù)的產生和驗證等等。(三)密碼類庫Crypto++?Library5.1的開發(fā)過程Crypto++密碼類庫自從公布以來,作為一種自由軟件,得到廣大開發(fā)者的支持,吸取了諸多優(yōu)秀的算法和原代碼,一直在不停的在完善和擴大,適應了多種常用的操作系統(tǒng)和編譯平臺。(四)密碼類庫Crypto++?Library5.1的編譯平臺Crypto++?Library5.1支持多種操作系統(tǒng)和多種各樣的編譯平臺,不過對于有些操作系統(tǒng)下的某些編譯平臺要添加一定的補丁,下面我們就把某些常用的操作系統(tǒng)和編譯平臺的編譯狀況列出來如下:開發(fā)環(huán)境操作系統(tǒng)編譯Crypto++4.2編譯Crypto++5.0編譯Crypto++5.1MSVC6.0SP5WIN32可直接編譯可直接編譯MSVC.NETWIN32可直接編譯MSVC.NETWIN32沒有測試要有效的補丁BorlandC++Builder6WIN32沒有測試GCC2.95.2UNIX/WIN32/BeOS/MSDOS(DJGPP2.03)可直接編譯GCC3.2UNIX/WIN32/BeOS要有效的補丁可直接編譯AppleGCC932.1(2.95.2)MacOSX(Darwin)要有效的補丁要有效的補丁可直接編譯AppleGCC1161(3.1)沒有測試CodeWarriorPro6.1MacOS/WIN32需要有效的工程文獻可直接編譯沒有測試CodeWarriorPro8.2沒有測試需要有效的工程文獻SunWorkShop6,ForteC++Solaris沒有測試沒有測試(五)密碼類庫Crypto++?Library5.1的類庫分析密碼庫是用了高層的c++特性,如模板,多重繼承和異常等一流的強有力的工具來實現(xiàn)多種各樣錯綜復雜的密碼算法ForpeoplewhoarefamiliarwithC++,thelibrarywillappearintuitiveandeasytouse.Othersmayneedtoviewitasalearningopportunity.IfyouareaC++beginnerandyouareunderaverytightschedule,orifyouare"afraid"ofthemoreadvancedfeaturesofC++,thislibrarymaynotbeforyou.Havingsaidthat,youareinvitedtoseeforyourselfhoweasyorharditistousebylookingatsomeoftheotheranswersinthiscategory.對熟悉c++的顧客來說很輕易用,下載:Whereisthetutorial?Whereisthereferencemanual?IsthereanyoneIcouldpaytohelpmewiththis?HowamIgoingtouseCrypto++ifIdon'thaveaclueaboutcryptography?RecommendedAlgorithmsThereisnothingthemoreexperiencedpeoplethatusethislibrarylikemorethanachallengingsecurityquestiontomullover.However,youmayfindyoudon'tgetmuchhelpifyouaskabasicquestionwithananswerthatiswell-documentedelsewhere.Thelibraryassumesyouknowincryptographictermswhatyouwanttoachieve.Untilyoureachthatpoint,perhapsyoushoulddosomebackgroundresearch?Youshouldalsoknowthatbuildingsecuresystemsisdifficultatthebestoftimes.Ifyoucanaffordit,youcangetsomeprofessionalhelp:IsthereanyoneIcouldpaytohelpmewiththis?Thegoodnewsisthatthereisadecentbodyofliteraturetohelpyou.Alistofrecommendedcryptographybooksisavailableat.Alotofgoodcryptoinformationisalsoavailableontheweb.Seeforalistofrecommendedsites.Crypto++containsalargenumberofalgorithms,anditmaynotalwaysbeobviouswhichonestouse.Thealgorithmsgivenbelowarerecommendedbecausetheyarewidelyusedandgenerallyconsideredtobesecureandpatent-free.blockcipher:DES-EDE3,Blowfish,Rijndaelstreamcipher:MARC4(ARC4withfirst256bytesofkeystreamdiscarded),anyoftheaboveblockciphersinCTRmodehashfunction:SHA1messageauthenticationcode:HMAC/SHA1publickeyencryption:RSA/OAEP/SHA1signature:RSA/PKCS1v15/SHA1,DSA,Generalized-DSA/SHA1keyagreement:DHrandomnumbergenerator:RandomPool,AutoSeededRandomPool10、Crypto++LibraryisafreeC++classlibraryofcryptographicschemes.Currentlythelibraryconsistsofthefollowing,someofwhichareotherpeople'scode,repackagedintoclasses.?aclasshierarchywithanAPIdefinedbyabstractbaseclasses?AES(Rijndael)andAEScandidates:RC6,MARS,Twofish,Serpent,CAST-256?othersymmetricblockciphers:IDEA,DES,Triple-DES(DES-EDE2andDES-EDE3),DESX(DES-XEX3),RC2,RC5,Blowfish,Diamond2,TEA,SAFER,3-WAY,GOST,SHARK,CAST-128,Square,Skipjack?genericciphermodes:ECB,CBC,CBCciphertextstealing(CTS),CFB,OFB,countermode(CTR)?streamciphers:Panama,ARC4,SEAL,WAKE,WAKE-OFB,BlumBlumShub?publickeycryptography:RSA,DSA,ElGamal,Nyberg-Rueppel(NR),Rabin,Rabin-Williams(RW),LUC,LUCELG,DLIES(variantsofDHAES),ESIGN?paddingschemesforpublic-keysystems:PKCS#1v2.0,OAEP,PSSR,IEEEP1363EMSA2?keyagreementschemes:Diffie-Hellman(DH),UnifiedDiffie-Hellman(DH2),Menezes-Qu-Vanstone(MQV),LUCDIF,XTR-DH?ellipticcurvecryptography:ECDSA,ECNR,ECIES,ECDH,ECMQV?one-wayhashfunctions:SHA-1,MD2,MD4,MD5,HAVAL,RIPEMD-160,Tiger,SHA-2(SHA-256,SHA-384,andSHA-512),Panama?messageauthenticationcodes:MD5-MAC,HMAC,XOR-MAC,CBC-MAC,DMAC?cipherconstructionsbasedonhashfunctions:Luby-Rackoff,MDC?pseudorandomnumbergenerators(PRNG):ANSIX9.17appendixC,PGP'sRandPool?passwordbasedkeyderivationfunctions:PBKDF1andPBKDF2fromPKCS#5?Shamir'ssecretsharingschemeandRabin'sinformationdispersalalgorithm(IDA)?DEFLATE(RFC1951)compression/decompressionwithgzip(RFC1952)andzlib(RFC1950)formatsupport?fastmulti-precisioninteger(bignum)andpolynomialoperations?finitefieldarithmetics,includingGF(p)andGF(2^n)?primenumbergenerationandverification?variousmiscellaneousmodulessuchasbase64codingand32-bitCRC?classwrappersfortheseoperatingsystemfeatures(optional):?highresolutiontimersonWindows,Unix,andMacOS?BerkeleyandWindowsstylesockets?Windowsnamedpipes?/dev/randomand/dev/urandomonLinuxandFreeBSD?Microsoft'sCryptGenRandomonWindows?Ahighlevelinterfaceformostoftheabove,usingafilter/pipelinemetaphor?benchmarksandvalidationtestingOnepurposeofCrypto++istoactasarepositoryofpublicdomain(notcopyrighted)sourcecode.Althoughthelibraryiscopyrightedasacompilation,theindividualfilesinit(exceptforafewexceptionslistedinthelicense)areinthepublicdomain.?4月22日增長了開發(fā)環(huán)境CodeWarriorPro8.2固定的工程文獻?增長VS.NET的補丁?公布Crypto++?Library5.1版本?4/22/-AddedfixedprojectfileforCodeWarriorPro8.2?4/19/-AddedpatchforVS.NET?3/22/-Version5.1release.?addedPSSpaddingandchangedPSSRtotrackIEEEP1363adraftstandard?addedblindingforRSAandRabintodefendagainsttimingattacksondecryptionoperations?changedsigninganddecryptionAPIstosupporttheabove?changedWaitObjectContainertoallowwaitingformorethan64objectsatatimeonWin32platforms?fixedabuginCBCandECBmodeswithprocessingnon-aligneddata?fixedstandardconformancebugsinDLIES(DHAESmode)andRW/EMSA2signaturescheme(thesefixesarenotbackwardscompatible)?fixedanumberofcompilerwarnings,minorbugs,andportabilityproblems?removedSapphire?3/10/-UpdatedpatchforMacOSX(Darwin)?10/4/-Version5.0hasbeenimportedintoCVS,withmodulename"c5"?10/1/-AddedupdatedCodeWarrior8projectfilefromAparajitaFishman.?9/30/-Version5.0released.?addedESIGN,DLIES,WAKE-OFB,PBKDF1andPBKDF2fromPKCS#5?addedkeyvalidationforencryptionandsignaturepublic/privatekeys?renamedStreamCipherinterfacetoSymmetricCipher,whichisnowimplementedbybothstreamciphersandblockciphermodesincludingECBandCBC?addedkeyinginterfacestosupportresettingofkeysandIVswithouthavingtodestroyandrecreateobjects?changedfilterinterfacetosupportnon-blockinginput/output?changedSocketSourceandSocketSinktouseoverlappedI/OonMicrosoftWindows?groupedrelatedclassesinsidestructstohelptemplates,forexampleAESEncryptionandAESDecryptionarenowAES::EncryptionandAES::Decryption?wherepossible,typedefshavebeenaddedtoimprovebackwardscompatibilitywhentheCRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITYmacroisdefined?changedHAVALandIDEAtousepublicdomaincode?implementedSSE2optimizationsforIntegeroperations?isbeingevaluatedforFIPS140-2compliance?fixedabuginHMAC::TruncatedFinal()?fixedSKIPJACKbyteorderingfollowingNISTclarificationdated5/9/02?8/26/-AddedportingnoteforSunWorkShop6withForteC++(四)密碼類庫Crypto++?Library5.1的編譯平臺TheseportingnoteswillhelpyoucompileCrypto++onvariousplatforms.IfyouneedtocompileCrypto++4.1orearlier,pleaseclickhere.開發(fā)環(huán)境操作系統(tǒng)編譯Crypto++4.2編譯Crypto++5.0編譯Crypto++5.1MSVC6.0SP5WIN32nochangesneedednochangesneededProcessorPacksupported/recommendedMSVC.NETWIN32nochangesneededMSVC.NETWIN32nottestedpatchavailableBorlandC++Builder6WIN32nottestedGCC2.95.2UNIX/WIN32/BeOS/MSDOS(DJGPP2.03)nochangesneededGCC3.2UNIX/WIN32/BeOSpatchavailablenochangesneededAppleGCC932.1(2.95.2)MacOSX(Darwin)patchavailablepatchavailablenochangesneededAppleGCC1161(3.1)nottestedCodeWarriorPro6.1MacOS/WIN32nochangesneededprojectfileavailablenottestedCodeWarriorPro8.2nottestedupdatedprojectfilebyAparajitaFishmanfixedprojectfileavailableSunWorkShop6,ForteC++SolarisnoteanddiffbyDavidLamkinnottestedRemembertousethe"-a"(auto-converttextfiles)optionwhenunzippingonaUnixmachine.Thezipfilesshouldhavethefollowinghashes:crypto42.zip:MD5:C1700E6E15F3189801E7EA47EEE83078SHA-1:505ECA07DF6708B7DED3E5D3D08C4RIPEMD-160:5D4CC8E5987B2416CF7D71AA6276AFAC61702E55SHA-256:CDF8A1EBB142759E928A323F47F228F4F93CEB2FE97C19DC59D6868989E0D76Ecrypto50.zip:MD5:fe8d4ef49b69874763f6dab30cbb6292SHA-1:d0d83e60b6c03408370ca6c13aa5cac5e2220bf1RIPEMD-160:150db13d4df29020829f0fe817f54ee5a0595e50SHA-256:c67c64693f32195e69d3d7e5bdf47afbd91e8b69d0407a2bc68a745d9dbebb26crypto51.zip:MD5:f4bfd4ac39dc1b7f0764d61a1ec4df16SHA-1:95905714c85f6fb563e66edb5478818df787fe2dRIPEMD-160:8b7420c421be39e9976f1ce2a80840d7ed6b38efSHA-256:d183a98c28feb1e0f7d21de5052aa8ca446475e95a5ebe7a7feb3cdIgetan"erroropeningfile"messagewhenIruncryptest.exe.Whycan'tIreadCrypto++objectsfromfilesviaFileStorewithSTLportstreams?I'mgettingtheerrormessage"Cryptographicalgorithmsaredisabledafterpower-upaselftestfailed"orsomethingabout"edc.dat".MicrosofttoolsIcompiledcryptest.exesuccessfully,butamgettinglinkererrorswithmyownapplication.I'mgettinginternalcompilererrorsonWindows98.OthersCanIuseCrypto++with<insertcompilernamehere>?IamgettingcompilererrorswithGCCorEGCS.GCCisusinganenormousamountofmemorytocompileCrypto++.I'mgettingan"as"(assembler)erroronSolaris.Crypto++4.2andSTLPort4.53IsitpossibletosupplyaprimemodulusasitiswithElGamalkeygenerationtootherPKalgorithmslikeRSAandDHinordertodecreasetheirkeygenerationtimes?Ifsocanyousupplyexamplecodetodojustthis?HowtooutputaIntegerasstring(Decimal/Hex)?(五)密碼類庫Crypto++?Library5.1的使用Thelibraryisanpowerfulandeleganttoolforperformingcomplexcryptography.ItusesadvancedC++featuressuchastemplates,multipleinheritance,andexceptionstoachievethatpowerandelegance.ForpeoplewhoarefamiliarwithC++,thelibrarywillappearintuitiveandeasytouse.Othersmayneedtoviewitasalearningopportunity.IfyouareaC++beginnerandyouareunderaverytightschedule,orifyouare"afraid"ofthemoreadvancedfeaturesofC++,thislibrarymaynotbeforyou.Havingsaidthat,youareinvitedtoseeforyourselfhoweasyorharditistousebylookingatsomeoftheotheranswersinthiscategory.對熟悉c++的顧客來說HowmuchC++experiencedoIneedtousethislibrary?HowdoIusetheFilterclass?HowdoIusehexencodinganddecoding?HowdoIuseablockcipherinCrypto++4.2?HowdoIuseablockcipherinCrypto++5.0?HowdoIuseastreamcipher?HowdoIuseahashfunction?HowdoIuseamessageauthenticationcode?HowdoIusearandomnumbergenerator?HowdoIuseapublickeycryptosystemorsignaturescheme?HowcanIuseanRSAkeyfromCrypto++inopenssl?Thesamplecodeshowshowtoworkwithafile,butmydataisinastring(orviceversa).WhyisElGamalkeygenerationsoslow?I'mtryingtoprocessmultiplemessageswithaFilter,andMaxRetrievable()alwaysreturns0afterthefirstone.(六)密碼類庫Crypto++?Library5.1的類庫分析見:\CryptoManual\00_index.htm\ClassHierarchy、CompoundList模板類、抽象類、類(七)密碼類庫Crypto++?Library5.1的應用實例(1)目前我們就來研究一下對這個庫的使用方法我們在win32的操作系統(tǒng)下用vc6++來編譯Crypto++?Library5.1的源代碼,在對應的目錄下會產生文獻夾Debug,在文獻夾Debug里,會有一種編譯好的靜態(tài)庫文獻cryptlib.lib我們就來研究什么用這個靜態(tài)庫文獻。Hash函數(shù)的應用Linkstocryptographicresources-AdministrationHowcanIcontributetothisFAQ?WhileYouAreDownloading?Takealookattherelatedlinkspage.Itincludeslinkstocryptolibrariesforotherlanguages,productsthatuseCrypto++,etc.?ConsiderthelistofrecommendedbooksforCrypto++users.?ExaminetheCrypto++licenseagreement.?Readdenisbider'sCrypto++UserGuide?BrowsetheCrypto++ReferenceManual(mirroredhere).?ViewtheseCrypto++classhierarchychartstoseehowCrypto++isorganized.Notethatthesechartsonlyincludeasmallnumberofactualalgorithmsasexamples.?symmetricalgorithmsandhashfunctions?publickeyalgorithmsMailingListsTherearetwomailinglistsforCrypto++.?-Crypto++announcements?-userquestionsandgeneraldiscussionrelatedtoCrypto++,archivedat:?subject=subscribewiththesubject"subscribe"tosubscribe,anduse"unsubscribe"subjecttounsubscribe.Whenpostingaquestiontothemailinglist,pleasegivethefollowinginformation,ifavailable:?exacterrormessage?stacktrace?aminimalprogramwithamain()function,thatreproducestheproblem?versionsofCrypto++,operatingsystem(outputof"uname-a"commandifusingUnix),andcompiler(outputof"gcc-v"ifusingGCC)ToContributeTheCrypto++sourcecodeandFAQarehostedon.?TheSourceForgeCVSRepositoryallowsyoutoviewthelatest(unreleased)Crypto++sourcecodeandtocontributebugfixesornewfeatures.TheCVSrepositorycontainstwomodules:?src-version4.xandearlier.?c5-version5.x.?TheCrypto++Faq-O-Maticallowsyoutoviewfrequentlyaskedquestionsandtocontributenewquestionsoranswers.PaidSupportandConsultingIfyouareinterestedinpaidsupportforCrypto++orconsultingonaCrypto++relatedproject,pleasetakealookatthislistofcompaniesandindividualsprovidingsuchservices.ThislistingisafreeservicefortheCrypto++community,andanyonemaysignuptobelistedbyfollowingtheabovelink.Crypto++的靜態(tài)連接庫及其在Win32平臺下的使用在win32的操作系統(tǒng)下用vc6++來編譯Crypto++?Library5.1的源代碼,在對應的目錄下會產生文獻夾Debug,在文獻夾Debug里,會有一種編譯好的靜態(tài)庫文獻cryptlib.lib;下面通過實例研究這個靜態(tài)庫文獻的使用:在應用lib文獻時先把庫里的頭文獻和lib文獻復制到工程的目錄里這是最佳的措施,或者把它們放到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版農戶土地承包流轉合同中包含農村電商合作條款范本4篇
- 2025版木枋行業(yè)綠色生產與節(jié)能減排合同4篇
- 2025年度配電室電氣設備安裝與調試合同4篇
- 2025年度智能煤場租賃與運營管理合同
- 避孕套婦產科學講解
- 二零二五年度農產品電商平臺數(shù)據(jù)分析及用戶行為研究合同
- 2025年度農產品電商運營托管服務合同4篇
- 二零二五版木結構建筑項目管理與咨詢服務合同3篇
- 二零二五年度木門安裝與售后服務合同規(guī)范范本2篇
- 二零二五年度公務用車全生命周期維護服務合同3篇
- 圖像識別領域自適應技術-洞察分析
- 個體戶店鋪租賃合同
- 禮盒業(yè)務銷售方案
- 術后肺炎預防和控制專家共識解讀課件
- 二十屆三中全會精神學習試題及答案(100題)
- 中石化高級職稱英語考試
- 小學五年級英語閱讀理解(帶答案)
- 2024二十屆三中全會知識競賽題庫及答案
- 仁愛版初中英語單詞(按字母順序排版)
- (正式版)YS∕T 5040-2024 有色金屬礦山工程項目可行性研究報告編制標準
- 小學一年級拼音天天練
評論
0/150
提交評論