rsa加密demo
选择一对不同的、足够大的素数p,q。
计算n=pq。
计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
找一个与f(n)互质的数e,且1<e<f(n)。
计算d,使得de≡1 mod f(n)。这个公式也可以表达为d ≡ e-1 mod f(n)
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。公钥KU=(e,n),私钥KR=(d,n)。
加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C ≡ M^e mod n。
解密过程为:M ≡ C^d mod n。
n = 33 = p * q = 3 * 11 t = (p - 1) * (q - 1) = 2 * 10 = 20 e = 3 var e = 3, t = 20, d; for(d = 3; d && d < 10000; d++){ //为了避免死循环,加上d<10000 if(d * e % t == 1){ console.log('d=%d',d); break; } } // d = 7 // // n = 33 // d = 7 // e = 3 // // C = M ^ d % n // M = C ^ e % n function rsa(a, k, m) { // a^k%m 摘自 http://wenku.baidu.com/view/27cea13743323968011c923b.html var b = 1; while (k >= 1) { if (k % 2 == 1){ b = a * b % m; } a = a * a % m; k = parseInt(k / 2); } return b; }
http://www.ohdave.com/rsa/
作者:阿良
出处:http://www.cnblogs.com/arliang
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议
进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。