第十屆藍橋杯 RSA 解密

2021-10-19 11:13:07 字數 2113 閱讀 2617

記錄一下自己的學習過程啦~~

上題目

【問題描述】

rsa 是一種經典的加密演算法。它的基本加密過程如下。

首先生成兩個質數 p, q,令 n = p · q,設 d 與 (p − 1) · (q − 1) 互質,則可

找到 e 使得 d · e 除 (p − 1) · (q − 1) 的餘數為 1。

n, d, e 組成了私鑰,n, d 組成了公鑰。

當使用公鑰加密乙個整數 x 時(小於 n),計算 c = xd mod n,則 c 是加

密後的密文。

當收到密文 c 時,可使用私鑰解開,計算公式為 x = ce mod n。

例如,當 p = 5, q = 11, d = 3 時,n = 55, e = 27。

若加密數字 24,得 243 mod 55 = 19。

解密數字 19,得 1927 mod 55 = 24。

現在你知道公鑰中 n = 1001733993063167141, d = 212353,同時你截獲了

別人傳送的密文 c = 20190324,請問,原文是多少?

1.已知n、d、c,求x( x =ce mod n)

2.要求x需求e

3.結合已知條件,若要求e需求d與e的關係:(de-1)%[(p-1)(q-1)]==0

4.若要求e、d間關係需求p、q

5.p、q即為n的質因數

資料較大時,這**跑的著實的慢,還沒想好怎麼優化

public

class

main

} x=math.

pow(c,d)

%n; system.out.

println

("x="

+x);

}public

static

long

pq(long n,

long d,

long

a)} a[0]

=i; a[1]

=n/i;

system.out.

println

("p="

+a[0])

; system.out.

println

("q="

+a[1])

;return a;

}public

static

boolean

zhishu

(long x)

}return y;

}public

static

boolean

huzhi

(long a,

long b)

if(a==1)

return

true

;else

return

false;}

}

1.互質

定義:兩個或多個整數的公因數只有1的非零自然數。公因數只有1的兩個非零自然數,叫做互質數。

判斷:用大數除以小數,如果除得的餘數與其中較小數互質,則原來兩個數是互質數。

2.求乙個數的質因數

public

intpq

(int n,

int[

] a)

} a[0]

=i; a[1]

=n/i;

return a;

}public

boolean

zhishu

(int x)

}return y;

}

3.判斷兩個數是否互質

private

static

boolean

get(

int n,

int m)

if(n==1)

return

true

;return

false

;}

第十屆藍橋杯 JavaA 迷宮

法一 思路 bfs,path記錄路徑。1.程式設計 2.觀察 description todo author frontier time 2019年4月9日 上午11 19 05 class node public class d迷宮 增量陣列,方向向量,直接按字典序排列 static int y ...

第十屆藍橋杯c組

求和 1905111 這裡的string npos可以使用 1代替 include include using namespace std intmain cout 矩形切割 21 include include using namespace std intmain cout 年號字元 byq i...

2019第十屆藍橋杯C C

這是我第一次參加藍橋杯比賽,比完後,有點低於預期,自己的發揮低於預期,賽事水準也低於預期。教室裡面很多同學的電腦出現問題,舉辦學校也沒有完善的應急方案,有一部分同學11點鐘才可以做題。提取碼 560f1.給20個球員擔任五個不同位置的得分,要你選五個球員組成一支球隊的最大得分。這道題要是全排列做的話...