加密算法中涉及C/C++總結


學習網站:http://www.runoob.com/cplusplus/cpp-functions.html

char在VC(c++)中占1字節(byte),8位(bit)。

int在VC(c++)中占4字節(4byte),32位(32bit)。

 一、相關函數摘要

1、srand( (unsigned) time( &t ) )

隨機函數srand()函數產生一個以當前時間開始的隨機種子

2、time( &t )

獲取time_t類型的當前時間

3、 clock()

這個函數返回從“開啟這個程序進程”到“程序中調用clock()函數”時之間的CPU時鍾計時單元(clock tick)數。

4、FILE *fopen(const char *filename, const char *mode) ;

使用給定的模式 mode 打開 filename 所指向的文件

  • filename -- 這是 C 字符串,包含了要打開的文件名稱。
  • mode -- 這是 C 字符串,包含了文件訪問模式,模式如下:
模式 描述
"r" 打開一個用於讀取的文件。該文件必須存在。
"w" 創建一個用於寫入的空文件。如果文件名稱與已存在的文件相同,則會刪除已有文件的內容,文件被視為一個新的空文件。
"a" 追加到一個文件。寫操作向文件末尾追加數據。如果文件不存在,則創建文件。
"r+" 打開一個用於更新的文件,可讀取也可寫入。該文件必須存在。
"w+" 創建一個用於讀寫的空文件。
"a+" 打開一個用於讀取和追加的文件。

 該函數返回一個 FILE 指針。否則返回 NULL,且設置全局變量 errno 來標識錯誤。

5、size_t fread(void  *ptr ,  size_t  size ,  size_t  nmemb ,  FILE   *stream);

從給定流 stream 讀取數據到 ptr 所指向的數組中

  • ptr -- 這是指向帶有最小尺寸 size*nmemb 字節的內存塊的指針。
  • size -- 這是要讀取的每個元素的大小,以字節為單位。
  • nmemb -- 這是元素的個數,每個元素的大小為 size 字節。
  • stream -- 這是指向 FILE 對象的指針,該 FILE 對象指定了一個輸入流。

成功讀取的元素總數會以 size_t 對象返回,size_t 對象是一個整型數據類型。如果總數與 nmemb 參數不同,則可能發生了一個錯誤或者到達了文件末尾。

6、char *strcat(char *dest, const char *src)

 src 所指向的字符串追加到 dest 所指向的字符串的結尾

 

  • dest -- 指向目標數組,該數組包含了一個 C 字符串,且足夠容納追加后的字符串。
  • src -- 指向要追加的字符串,該字符串不會覆蓋目標字符串。

該函數返回一個指向最終的目標字符串 dest 的指針。

7、 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 

 ptr 所指向的數組中的數據寫入到給定流 stream 中;把ptr所指向的nmemb*size個字節輸出到stream所指向的文件中。

  • ptr -- 這是指向要被寫入的元素數組的指針。
  • size -- 這是要被寫入的每個元素的大小,以字節為單位。
  • nmemb -- 這是元素的個數,每個元素的大小為 size 字節。
  • stream -- 這是指向 FILE 對象的指針,該 FILE 對象指定了一個輸出流。

返回寫到stream文件總的數據項個數。

8int fclose(FILE *stream)

關閉stream所指文件,釋放文件緩沖區

  • stream -- 這是指向 FILE 對象的指針,該 FILE 對象指定了要被關閉的流。

出錯返回非0,否則返回0。

9、int feof(FILE *stream)

測試給定流 stream 的文件結束標識符;檢查文件是否結束。

  • stream -- 這是指向 FILE 對象的指針,該 FILE 對象標識了流。

遇到文件結束符返回非零值,否者返回0。

二、ECC代碼中調用的大數庫(tommath)函數總結

1、mp_int a

mp_digit是無符號整數;dp是存放大整數的地址;used為實際使用的mp_digit單元;sign=0,表示非負數;=1表示負數。

2.   mp_init

初始化mp_int結構,函數返回MP_OKAY,就可以認為該結構已正確初始化,可以安全的被庫中其他函數使用

3. mp_init_set_int

初始化mp_int結構並設置大常量。它接受一個“長”數據類型作為輸入,並且總是將其當作一個32位整數。

輸入一個mp_int類型的和一個“長”整型b,輸出a等於b。

4.mp_init_set

其中b是一個數據位。

初始化mp_int結構並設置小常量。例如將mp_int結構設置成一個相對較小的值(1或2等)。

 5. mp_toradix

函數原型為int mp_toradix(mp_int *a, char *str, int radix)

此算法計算mp_int類型的a的以r為基的表示法,並把數位存在數組temp(char型)中並以字符串形式輸出到屏幕上。

6. mp_prime_random_ex

函數原型為int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat);

*dat一般可設置為NULL。

求一定位數的素數

a為返回值,t為回測次數,通常可為10,size指產生的素數的位數

7.mp_expt_d

函數原型為int mp_expt_d(mp_int *a, mp_digit b, mp_int *c)

此算法計算a的b次冪,其中b為單數位數字。

8. mp_sqr

函數原型為int mp_sqr(mp_int *a, mp_int *b)

輸入mp_int類型的a,輸出b=a^2.分配了一個臨時mp_int b來保存平方結果。

9.mp_sqrt

函數原型為int mp_sqrt(mp_int *arg, mp_int *ret);

此算法為開平方根算法。

10.mp_mul_d

函數原型為int mp_mul_d(mp_int *a, mp_digit b, mp_int *c)

單數位乘法。此算法快速計算mp_int與單數位值的乘積。輸入mp_int a和mp_digit b,輸出c=ab

11.mp_mul

函數原型為int mp_mul(mp_int *a, mp_int *b, mp_int *c);

計算兩個數的有符號乘積。返回結果為目標操作數c=ab。

12.mp_add

函數原型為int mp_add(mp_int *a, mp_int *b, mp_int *c)

輸入兩個mp_int類型的a和b,輸出有符號加法c=a+b。

13.mp_sub

函數原型為int mp_sub(mp_int *a, mp_int *b, mp_int *c);

輸入兩個mp_int類型的a和b,輸出有符號加法c=a-b。

14.mp_mod

函數原型為int mp_mod(mp_int *a, mp_int *b, mp_int *c)

輸入兩個mp_int類型的a和b ,輸出c=a mod b, 0 <= c < b

15.mp_cmp

函數原型為int mp_cmp(mp_int *a, mp_int *b)

有符號數的比較。輸入兩個mp_int類型的a和b,輸出有符號數比較結果(a在b的左邊)

函數返回值為MP_GT=1時為大於;MP_EQ=0時為等於;MP_LT=-1時為小於。

16.mp_clear

函數原型為void mp_clear(mp_int *a);

輸入:mp_int類型的變量a,輸出:回收為a分配的內存。

17.mp_copy

函數原型為int mp_copy(mp_int *a, mp_int *b);

b = a,該算法拷貝了mp_int結構a,算法成功終止時,mp_int結構b就和a代表同一個整數值。mp_int結構b是結構a的完整但不同的拷貝,mp_int結構a可以修改並且不會影響mp_int結構b的值。

18.mp_init_copy

函數原型:int mp_init_copy(mp_int *a, mp_int *b);

初始化mp_int結構a,並將b拷貝到a 。

19. mp_zero

函數原型為void mp_zero(mp_int *a);

輸入mp_int 類型的a,並將a的內容清零。

20.mp_invmod

函數原型為int mp_invmod(mp_int *a, mp_int *b, mp_int *c);

c = 1/a (mod b)

輸入mp_int a和b,(a,b)=1,p>=2,0<a<p,輸出模逆c=a^-1(mod b)。即ab=1(mod p)

21.mp_mulmod

函數原型為int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);

此算法求解 d = a * b (mod c)

22. mp_submod

函數原型為int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);

 此算法求解 d = a - b (mod c)

 

 

轉載自:http://blog.csdn.net/wjj1987/article/details/6409469

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM