1. 程式人生 > >C/C++大數運算庫介紹及安裝

C/C++大數運算庫介紹及安裝

在網路安全技術領域中各種加密解密演算法的軟體實現上始終有一個共同的問題就是如何在普通的PC機上實現大數的運算。眾所周知,我們現在日常生活中所普遍應用的計算機,即我們通常所說的PC機個人電腦大部分的機器內部字長還是32位的,最近才開始向64位的字長過渡,但是在各種加密解密的演算法中為了達到一定的安全強度,都是要求在128位、512位或者是1024位這樣的字長下進行加減乘除模逆等各種數學運算,我們稱為大數運算。在這樣的前提下,如何在PC機上快速高效的實現大數運算就很自然的成為了在PC機上實現加密解密演算法最為基礎和重要的問題。

為了解決大數運算的問題,世界各國的軟體開發人員和研究學者都進行了很多的研究和實踐。近年來,越來越多的開發人員開始重視軟體工程的作用,為了減少重複勞動,提高軟體的質量和程式碼複用,許多優秀的大數運算庫隨之出現。下面對幾種優秀的大數庫進行簡單的介紹:

1.GMP:GMP大數庫是GNU專案的一部分,誕生於1991年。作為一個任意精度的大整數運算庫,它包括了任意精度的帶符號整數、有理數、浮點數的各種基本運算操作。它是一個c語言的庫,但是官方提供了c++的包裝類,主要的應用方向是密碼學、網路安全、代數系統、計算科學等。GMP庫的執行速度非常快的,它的官方網站上稱自己為地球上最快的大數庫,但是GMP庫所提供的只是數學運算功能,並沒有密碼學相關的高階功能。

ubuntu-linux平臺安裝指南:

(1).安裝GMP 之前需要先安裝m4 (不然會出錯),m4可以通過命名自動安裝

$sudo apt-get install m4

(2).去官網下載gmp-6.1.2.tar.bz2,官網連結為

https://gmplib.org/

(3).將下載之後的安裝包解壓,在終端中輸入:

tar -jvxf gmp-6.1.2.tar.bz2

(4).進入gmp-6.1.2資料夾 :

$cd gmp-6.1.2
$./configure (若之後用g++編譯則為./configure –enable-cxx)
$make
$make check
$sudo make install

2.Miracl:Miracl庫是Shamus Software Ltd開發的一個大數庫,它的使用許可針對教育科學研究或者非商業目的地應用是免費的。在應用上它是一個c語言的庫,同時提供了幾個較為簡單的c++包裝類。在功能上它不但提供了高精度的大整數和分數的各種數學運算操作而且提供了很多密碼學演算法中的功能模組,如SHA、AES、DSA等中的一些底層操作。最為特別的是它還提供了很多橢圓曲線密碼體制中的底層功能模組。由於Miracl庫的內部實現採用了很多的彙編層的程式碼,故執行速度也非常快。

3.Crypto++:Crypto++庫是一個開源專案,也是免費使用的。由於它是一個純c++實現的庫,所以應用非常的方便,庫的結構清晰,使用方便,文件也很健全。Crypto++庫提供了很多密碼學演算法的實現。

4.OpenSSL:OpenSSL是一個開放原始碼的實現了SSL及相關加密技術的軟體包,由加拿大的Eric Yang等發起編寫的。它可以實現訊息摘要、檔案的加密和解密、數字證書、數字簽名和隨機數字等。 它的主要用途並不是大數庫,而是SSL協議的實現和應用,但是其中也有一些關於大整數的功能,此外它也是基於c語言。