当前位置:编程学习 > C/C++ >>

C++实现DES算法和RSA算法???

谁能给可以编译的源代码??

答案:#include<iostream.h>
#include <stdlib.h>
#include<math.h>
#include<String.h>
int r;  //公开模数
int sk; //私人密钥
int pk; //公开密钥
int Euler;//欧拉函数
int check(int x)
{
    for(int i=2;i<=x-1;i++)
    {
        if(x%i==0) break;
    }
     if(i==x) return 1;
     else return 0;
}
void produceSS()
{
    int p,q;
    int flag=0;
    int n=0;
    cout<<"输入值不要太大,防止溢出!"<<endl;
    while(flag==0)
    {
       if(n>0) cout<<"p应为素数,请重新输入!"<<endl;
       cout<<"请输入素数p:";
       cin>>p;
       flag=check(p);
       n++;
    }
    flag=0;
    n=0;
    while(flag==0)
    {
       if(n>0) cout<<"q应为素数,请重新输入!"<<endl;
       cout<<"请输入素数q:";
       cin>>q;
       flag=check(q);
       n++;
    }
    r=p*q;
    cout<<"公开模数:r="<<r<<endl;
    Euler=(p-1)*(q-1);
    cout<<"欧拉函数:Euler="<<Euler<<endl;
}


int 易做图(int x,int y)
{
    int a=x;
    int b=y;
    int z;
    b++;
    do
    {
      b--;
      x=a;
      y=b;
      while(x%y!=0)
      {
        z=x%y;
        x=y;
        y=z;
      }
    }while(z>1);
    return b;
}


int trAsc(int s,int a[]) //转为二进制数
{
  int x=s;
  int n=0;
  while(x!=0)
  {
      a[n]=x%2;
      x=x/2;
      n++;
  }
  return n;
}

int pfc(int x,int key) //平方乘
{
    int a[13];
    int m=trAsc(key,a);   //二进制位数
    int c=1;
    for(int i=m-1;i>=0;i--)
    {
        c=c*c%r;
        if(a[i]==1) c=c*x%r;
    }
    return c;
}

int producePk()
{
    int a1=sk;
    int r1=r;
    int q1, p1;
    int b1=0;
    int b2=1;
    int b3;
    do{
       cout<<a1<<endl;
       p1=r1/a1;
       q1=r1%a1;
       b3=b1-b2*p1;
       b1=b2;
       b2=b3;
       r1=a1;
       a1=q1;
    }while(a1!=1);
    return abs(b2);
}

void produceKey()
{
    int k;
    int n=0;
    int flag=0;
    int b1=0;
    int b2=1;
    int a,c,q,p;
    cout<<"初始密钥应小于欧拉函数:"<<r<<endl;
    cout<<"请输入初始密钥:";
    cin>>sk;
    sk++;
    do
    {
       sk--;
       sk=abs(sk);
       sk=易做图(Euler,sk);
       b1=0;
       b2=1;
       a=sk;
       c=Euler;
       do
       {
         q=c/a;
         p=c%a;
         pk=b1-b2*q;
         c=a;
         a=p;
         b1=b2;
         b2=pk;
       }while (p!=1);
       pk=abs(pk);
       a=pfc(8,sk);
       c=pfc(a,pk);
   } while(c!=8);  //加密、解密正确判断
    cout<<"私人密钥:sk="<<sk<<endl;
    cout<<"公开密钥:pk="<<pk<<endl;
}

void Encryption()  //加密
{
    int Express;
    int flag=1;
    while(flag)
    {
       cout<<"明文编码应小于公开模数r:"<<r<<endl;
       cout<<"请输入要加密的明文编码(十进制数):";
       cin>>Express;
       if(Express>r)
           cout<<"明文编码应大于公开模数,请重新输入!"<<endl;
       else flag=0;
    }
    cout<<"sk="<<sk<<endl;
    cout<<"原编码为:"<<Express;
    Express=pfc(Express,sk);
    cout<<"密文为:"<<Express<<endl;
}

void Decrypt()//减密
{
    int Express;
    int flag=1;
    while(flag)
    {
       cout<<"密文编码应小于公开模数r:"<<r<<endl;
       cout<<"请输入要加密的密文编码(十进制数):";
       cin>>Express;
       if(Express>r)
           cout<<"密文编码应大于公开模数,请重新输入!"<<endl;
       else flag=0;
    }
    cout<<"pk="<<pk<<endl;
    cout<<"原编码为:"<<Express;
    Express=pfc(Express,pk);
    cout<<"明文为:"<<Express<<endl;
}


void main()
{
    int flag=1;
    int step;
    int n;
    while(flag)
    {
         cout<<"1.产生素数"<<endl;
      cout<<"2.产生密钥"<<endl;
      cout<<"3.加密"<<endl;
      cout<<"4.解密"<<endl;
      cout<<"5.退出"<<endl;
      cout<<"请输入您的操作(1,2,3,4或5):";
      cin>>step;
      switch(step)
      {
        case 1:produceSS();
      &

上一个:c++课程设计之电话薄的设计
下一个:C++怎么样改指定内存地址的值

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,