• 大小: 452KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-31
  • 语言: 其他
  • 标签: RSA  加解密  

资源简介

实现 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 < On; j+=1331)
    {
        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

评论

共有 条评论