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。
摘自http://bank.hexun.com/2009-06-24/118958531.html
n = 33 = p * q = 3 * 11 t = (p - 1) * (q - 1) = 2 * 10 = 20 e = 3var e = 3, t = 20, d; for(d = 3; d && d < 10000; d++){ //為了避免死循環,加上d<10000if(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 % nfunction rsa(a, k, m) { // a^k%m 摘自 http://wenku.baidu.com/view/27cea13743323968011c923b.htmlvar 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/
轉載于:https://www.cnblogs.com/arliang/archive/2013/04/16/RSA_demo.html
總結
- 上一篇: 使用 Newtonsoft.Json;
- 下一篇: 乱想-HTTP请求常用对象