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 Lib Chapter 2 Cryptography (RSA實驗室 第二章,密碼學)APT密碼學
- 密碼和引數的恢復密碼
- EBS密碼安全的幾個引數密碼
- 非1~2^n數列的自然數密碼《二D》密碼
- Pycrypto與RSA密碼技術筆記密碼筆記
- RSA Lib Chapter 1 -- Introduction (RSA實驗室 第一章,密碼學介紹)APT密碼學
- 密碼相關的引數或事項密碼
- (半課內)信安數基 RSA-OAEP 初探
- 現代密碼學-課後習題【李子臣】密碼學
- 基於RSA的WEB前端密碼加密方案Web前端密碼加密
- mysql學習之-密碼管理(預設密碼,修改密碼,解決忘記密碼)MySql密碼
- 【論文閱讀筆記】-針對RSA的短解密指數的密碼學分析(Cryptanalysis of Short RSA Secret Exponents)筆記解密密碼學
- 大學數學新生入門學習數學方法導引 by Ph.D.王小龍
- 密碼學中的RSA演算法與橢圓曲線演算法密碼學演算法
- linux中ssh使用rsa免密碼登入方法Linux密碼
- RSA演算法以及數學基礎演算法
- ASM有自己的引數、密碼、alert、監聽檔案ASM密碼
- REMOTE_LOGIN_PASSWORDFILE引數和ORAPW密碼檔案REM密碼
- 密碼學中的一些數學基礎密碼學
- 密碼學密碼學
- Data Guard 學習之引數設定
- 應用密碼學——古典密碼密碼學
- 《密碼學系列》|| 密碼學中的流密碼是怎麼回事?密碼學
- gcc的-D和-U引數:宏的設定與取消(轉)GC
- 微課|Python程式設計開發寶典(5.2.2):預設值引數Python程式設計
- 密碼學基礎概念 — 密碼學複習(一)密碼學
- 應用密碼學 - 公鑰密碼密碼學
- 應用密碼學——分組密碼密碼學
- Swift語言中為外部引數設定預設值可變引數常量引數變數引數輸入輸出引數Swift變數
- Java設定JSON字串引數編碼JavaJSON字串
- ubuntu root預設密碼(初始密碼)Ubuntu密碼
- 使用SSH RSA key免密碼登入Linux伺服器密碼Linux伺服器