資源簡介
實現 RSA 密碼體制 :
1、編寫程序構造一 RSA 密鑰;
2、編寫程序實現快速指數算法;
3、編寫程序生成大素數;
4、實現 RSA 密碼體制。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
int?Plaintext[100];//明文
long?long?Ciphertext[100];//密文
int?n?e?=?0?d;
//二進制轉換
int?BianaryTransform(int?num?int?bin_num[])
{
????int?i?=?0??mod?=?0;
????//轉換為二進制,逆向暫存temp[]數組中
????while(num?!=?0)
????{
????????mod?=?num%2;
????????bin_num[i]?=?mod;
????????num?=?num/2;
????????i++;
????}
????//返回二進制數的位數
????return?i;
}
//快速指數算法?,反復平方求冪
long?long?Modular_Exonentiation(long?long?a?int?b?int?n)
{
????int?c?=?0?bin_num[1000];
????long?long?d?=?1;
????int?k?=?BianaryTransform(b?bin_num)-1;
????for(int?i?=?k;?i?>=?0;?i--)
????{
????????c?=?2*c;
????????d?=?(d*d)%n;
????????if(bin_num[i]?==?1)
????????{
????????????c?=?c?+?1;
????????????d?=?(d*a)%n;
????????}
????}
????return?d;
}
//生成1000以內素數
int?ProducePrimeNumber(int?prime[])
{
????int?c?=?0?vis[1001];
????memset(vis?0?sizeof(vis));
????for(int?i?=?2;?i?<=?1000;?i++)if(!vis[i])
????{
????????prime[c++]?=?i;
????????for(int?j?=?i*i;?j?<=?1000;?j+=i)
????????????vis[j]?=?1;
????}
????return?c;
}
//歐幾里得擴展算法
int?Exgcd(int?mint?nint?&x)
{
????int?x1y1x0y0?y;
????x0=1;?y0=0;
????x1=0;?y1=1;
????x=0;?y=1;
????int?r=m%n;
????int?q=(m-r)/n;
????while(r)
????{
????????x=x0-q*x1;?y=y0-q*y1;
????????x0=x1;?y0=y1;
????????x1=x;?y1=y;
????????m=n;?n=r;?r=m%n;
????????q=(m-r)/n;
????}
????return?n;
}
//RSA初始化
void?RSA_Initialize()
{
????//取出1000內素數保存在prime[]數組中
????int?prime[5000];
????int?count_Prime?=?ProducePrimeNumber(prime);
????//隨機取兩個素數pq
????srand((unsigned)time(NULL));
????int?ranNum1?=?rand()%count_Prime;
????int?ranNum2?=?rand()%count_Prime;
????int?p?=?prime[ranNum1]?q?=?prime[ranNum2];
????n?=?p*q;
????int?On?=?(p-1)*(q-1);
????//用歐幾里德擴展算法求ed
????for(int?j?=?3;?j?????{
????????int?gcd?=?Exgcd(j?On?d);
????????if(?gcd?==?1?&&?d?>?0)
????????{
????????????e?=?j;
????????????break;
????????}
????}
????if(e)
{
cout<<“生成的公鑰為?(e?n)?:?e?=?“< ???? cout<<“生成的私鑰為?(d?n)?:?d?=?“< ? }?
}?
//RSA加密
void?RSA_Encrypt()
{
????for(int?i?=?0;?i?100;?i++)
????????Ciphertext[i]?=?Modular_Exonentiation(Plaintext[i]?e?n);
????cout<<“用公鑰(e?n)加密,密文為?:“< //用字符輸出?
????char?c[100];
????for(int?i?=?0;?i?100;?i++)
????????c[i]=(char)Ciphertext[i];
????cout< }
//RSA解密
void?RSA_Decrypt()
{
????for(int?i?=?0;?i?100;?i++)
????????Ciphertext[i]?=?Modular_Exonentiation(Ciphertext[i]?d?n);
????cout<<“用私鑰(d?n)解密,明文為:“< //字符輸出?
????char?c[100];
????for(int?i?=?0;?i?100;?i++)
????????c[i]=(char)Ciphertext[i];
????cout< }
//算法初始化
void?Initialize()
{
????cout<<“請輸入需要加密的信息:“< ????char?p[100];
????cin>>p;
????for(int?i?=?0;?i?100;?i++)
???? Plaintext[i]=p[i];
????cout< }
int?main()
{
????Initializ
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3251??2017-10-14?12:08??RSA\RSA_lxk.cpp
?????文件?????1924619??2017-10-14?12:08??RSA\RSA_lxk.exe
- 上一篇:信息安全數學基礎習題答案裴定一
- 下一篇:Peersim研究資料
評論
共有 條評論