hust 密碼學課設 rsa引數d
hust密碼學課設 rsa引數d,
#include <stdio.h>
#include <gmpxx.h>
#include<time.h>
#include<stdlib.h>
#pragma warning (disable:4996)
mpz_class modmod(mpz_class a, mpz_class m, mpz_class n)
{
mpz_class result = 1;
while (m != 0) {
if ((m & 1) == 1) {
result = (result * a) % n;
}
a = (a * a) % n;
m = m>>1;
}
return result;
}
//求最大公因數
mpz_class maxgcd(mpz_class a, mpz_class b)
{
while (1)
{
while (a > b)
a = a - b;
if (a < b)
{
b = b - a;
continue;
}
else
return a;
}
}
//求引數d
mpz_class rsad(mpz_class e, mpz_class m)
{
mpz_class x1, x2, x3, y1, y2, y3, t1, t2, t3, q;
x1 = y2 = 1;
x2 = y1 = 0;
x3 = (e >= m) ? e : m;
y3 = (e >= m) ? m : e;
while (1)
{
if (y3 == 0)
return 0;
if (y3 == 1)
return y2;
q = x3 / y3;
t1 = x1 - q * y1;
t2 = x2 - q * y2;
t3 = x3 - q * y3;
x1 = y1;
x2 = y2;
x3 = y3;
y1 = t1;
y2 = t2;
y3 = t3;
}
}
//素性檢測
int pjudge(mpz_class n)
{
mpz_class a, b, m, r;
m = n - 1;
int i, k = 0;
while ((m % 2) != 0) {
m >>= 2;
k++;
}
//隨機數生成
gmp_randstate_t rstate;
gmp_randinit_default(rstate);
gmp_randseed_ui(rstate, time(NULL));
mpz_class n1 = n - 1;
mpz_urandomm(a.get_mpz_t(), rstate, n1.get_mpz_t());
a = a + 1;
b = modmod(a, m, n);//a的m次方模n
if ((b % n) == 1)
return 1;
for (i = 0; i < k; i++) {
if ((b % n) == ((-1) % n))
return 1;
else
b = (b * b) % n;
}
return 0;
}
int main()
{
int n, i;
mpz_class e, p, q, m, d;
scanf("%d", &n);
for (i = 0; i < n; i++)//問題的個數
{
gmp_scanf("%Zd %Zd %Zd", e.get_mpz_t(), p.get_mpz_t(), q.get_mpz_t());
m = (p - 1) * (q - 1);
if (e<65536)
{
printf("ERROR\n");
continue;
}//判斷e不能太小
//判斷是否素數
if (pjudge(p)==0)
{
printf("ERROR\n");
continue;
}
if (pjudge(q)==0)
{
printf("ERROR\n");
continue;
}
//pq間隔不能太小
if (abs(p - q) <65536)
{
printf("ERROR\n");
continue;
}
//p-1和q-1不能太平滑
mpz_class maxg = maxgcd((p - 1), (q - 1));
if (maxg > 20)
{
printf("ERROR\n");
continue;
}
if (gcd(e,m)!=1)
{
printf("ERROR\n");
continue;
}
//求d
d = rsad(e, m);
gmp_printf("%Zd\n", d.get_mpz_t());
}
}
看了看別人的程式碼
再看下自己的
wtcl
`
相關文章
- RSA加密原理&密碼學&HASH加密密碼學
- iOS逆向(1)-密碼學(RSA)iOS密碼學
- 密碼學課程設計 - 混合密碼的實現密碼學
- IOS 逆向開發(一)密碼學 RSAiOS密碼學
- 現代密碼-公鑰密碼RSA密碼
- [譯] 密碼學速成課密碼學
- 【論文閱讀筆記】-針對RSA的短解密指數的密碼學分析(Cryptanalysis of Short RSA Secret Exponents)筆記解密密碼學
- RSA 數學原理
- 現代密碼學-課後習題【李子臣】密碼學
- (半課內)信安數基 RSA-OAEP 初探
- 密碼學中的RSA演算法與橢圓曲線演算法密碼學演算法
- ASM有自己的引數、密碼、alert、監聽檔案ASM密碼
- 密碼學密碼學
- 微課|Python程式設計開發寶典(5.2.2):預設值引數Python程式設計
- 應用密碼學——古典密碼密碼學
- Java設定JSON字串引數編碼JavaJSON字串
- 《密碼學系列》|| 密碼學中的流密碼是怎麼回事?密碼學
- 密碼學中的一些數學基礎密碼學
- 應用密碼學 - 公鑰密碼密碼學
- 應用密碼學——分組密碼密碼學
- 密碼學基礎概念 — 密碼學複習(一)密碼學
- 隱藏程式命令列引數,例如輸入密碼等高危操作命令列密碼
- 密碼安全:密碼設定要求,密碼爆破辦法,密碼歸類使用,密碼處置方案密碼
- shell (3)指令碼引數傳遞與數學運算指令碼
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- 分組密碼(一) — 密碼學複習(四)密碼學
- 密碼學簡述密碼學
- 古典密碼學 (一)密碼學
- 密碼學入門密碼學
- 密碼工程-大素數密碼
- 引數匹配模型——Python學習之引數(二)模型Python
- 密碼危機:深度學習正在加速密碼破解!密碼深度學習
- 密碼學與密碼安全:理論與實踐密碼學
- 古典密碼的演化 (一)— 密碼學複習(二)密碼學
- 古典密碼的演化 (二)— 密碼學複習(三)密碼學
- 數學課程目錄
- 小程式內引數和掃碼引數統一
- 數學科學電子課本