- 論壇徽章:
- 15
|
本帖最后由 yulihua49 于 2011-10-28 15:53 編輯
對于表達式(數(shù)字均為十進制數(shù)): (319570873830358677766204855298122686115^26788392849192711860555115 ...
sh365 發(fā)表于 2011-10-28 12:47 ![]()
這是很普通的算法啊!在ssl里有。
在密碼學(xué)用的大數(shù)是在有限域,應(yīng)該是大的正整數(shù)。
2樓算法的程序?qū)崿F(xiàn):- #include <stdio.h>
- #include "bignum.h"
- /* ret = a ** z % n */
- u_int *expmod(int n,u_int *a,u_int *z,u_int *m,u_int *ret)
- {
- u_int a1[MAXNUMBER+1];
- u_int z1[MAXNUMBER+1];
- u_int x[MAXNUMBER+1];
- numcpy(n,a1,a);
- numcpy(n,z1,z);
- n_one(n,x);
- while(!n_iszero(n,z1)) {
- while(!(z1[0]&1)) {
- rshift(n,z1,1);
- /* a1 = (a1 *a1) % m; */
- mulmod(n,a1,a1,m,a1);
- }
- decm(n,z1);
- /* x = (x*a1) % m; */
- mulmod(n,x,a1,m,x);
- }
- numcpy(n,ret,x);
- return ret;
- }
復(fù)制代碼 數(shù)由uint32_t數(shù)組表示,n是數(shù)組的大小。
其他任何格式表示的數(shù)字可以經(jīng)過轉(zhuǎn)換進入數(shù)組。 |
|