- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2016-03-07 16:19 编辑
keymirage 发表于 2016-03-05 16:51
rsa 加密的公式 :
c = p^e % n (p的e次方 对 n 取模)
其中 c, p, e, n 都为 1024位(128字节)。
有限域,懂不懂?p^e%N是不可分割的整体。
给你个程序看看吧:expmod.c
- #include "bignum.h"
- /* ret = a ** z % n */
- u_int *_e_m_(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; */
- _m_m_(n,a1,a1,m,a1);
- }
- decm(n,z1);
- /* x = (x*a1) % m; */
- _m_m_(n,x,a1,m,x);
- }
- numcpy(n,ret,x);
- return ret;
- }
复制代码 mulmod.c:每次乘积立即求模,就不会无限大了,有限域算法
- #include "bignum.h"
- u_int *_m_m_(int n,u_int *a,u_int *b,u_int *m,u_int *ret)
- {
- u_int tmp[MAXNUMBER*2+1];
- mulm(n,a,b,tmp);
- divm(n,tmp,m,(u_int *)0,ret);
- return ret;
- }
复制代码 |
|