RSA加密演算法的java實現

2021-07-04 21:11:52 字數 1533 閱讀 1952

演算法描述:

(1)選擇一對不同的、足夠大的素數p,q。

(2)計算n=pq。

(3)計算f(n)=(p-1)(q-1),同時對p, q嚴加保密,不讓任何人知道。

(4)找乙個與f(n)互質的數e,且1< e < f(n)。

(5)計算d,使得de≡1 mod f(n)。這個公式也可以表達為d ≡e-1 mod f(n)

這裡要解釋一下,≡是數論中表示同餘的符號。公式中,≡符號的左邊必須和符號右邊同餘,也就是兩邊模運算結果相同。顯而易見,不管f(n)取什麼值,符號右邊1 mod f(n)的結果都等於1;符號的左邊d與e的乘積做模運算後的結果也必須等於1。這就需要計算出d的值,讓這個同餘等式能夠成立。

(6)公鑰ku=(e,n),私鑰kr=(d,n)。

(7)加密時,先將明文變換成0至n-1的乙個整數m。若明文較長,可先分割成適當的組,然後再進行交換。設密文為c,則加密過程為:

(8)解密過程為:

理論參考出處

/**@author:micro_hz

2023年8月27日

*//*

* rsa加密演算法

*/public

class

rsatest

if(i == p)}}

//已經選出了兩個質數

int n = array[0] * array[1];

int t = (array[0] - 1) * (array[1] - 1);

// n = 33;

// t = 20;

system.out.println("n: "+n+" t: "+t);

/** 選出公鑰e要去t互質,e < t

*/int e = 0;

for(int i = t - 1;i >= 2;i --)

if(q == i)

}if(e != 0)}/*

* 接下來我們來選出私鑰d,d*e mod t == 1

*/int d = 0;

while(d * e % t != 1 || e == d)

system.out.println("選出了私鑰d: "+d);

/** 都準備好了,可以加密解密了。

*///加密

// e = 3;d = 7;n = 33; t = 20;

int c = (int) (math.pow(message, e) % t);

system.out.println("加密後的資料為:"+c);

//解密

int m = (int) (math.pow(c, d) % t);

system.out.println("解密後的資料為:"+m);

return c;

}public

static

void

main(string args)}}

由於double型別的記憶體儲存空間受限,因此程式只參考作用。

RSA加密演算法

素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也不是素數。另一方面,13除了等於13 1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為 質數 二 什麼是 互質數...

RSA加密演算法

演算法的描述 1.選取兩個素數p,q 2.計算n p q,fn p 1 q 1 3.選擇乙個整數e,使得e與fn的最大公約數為1,e將會用於對資料進行加密。4.計算出乙個整數d,使得d e除fn的餘數為1。d用於對密文進行解密,還原出明文。5.假設明文為m,密文為c。如果需要對原文進行加密,則進行如...

RSA加密演算法

一 rsa是公鑰加密演算法之一,該演算法的數學基礎是 1 初等數論的euler定理,即 若整數a與整數n互素,則a n 1 mod n 其中,n 為尤拉函式。2 大整數分解很困難,即給定乙個大整數n,將其分解為n p q,兩個素數乘積十分困難。二 rsa基本原理 1 金鑰的生成。選擇大素數p,q,計...