• 大小: 298KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: C/C++
  • 标签: 10级  参考  

资源简介

C语言编写,密码学实验,10级做的,可参考。

资源截图

代码片段和文件信息

//文件名:实验4
//作者:杜磊
//电子邮件地址:handsome9501@qq.com
//说明:实现RSA对任意文件的加解密 
//最后一次修改:2012年12月10日

#include
#include
#include 
#include 
#include    
#include   

#define NUM 100
#define LEN sizeof(struct rsalink)
void  print(int a[NUM]);//自定义数运算库,打印
int cmpl(int a[NUM]int b[NUM]);//比较判断 
void move(int a[NUM]int *b);//移位操作
void mul(int a[NUM]int b[NUM]int *c);//乘法操作
void add(int a[NUM]int b[NUM]int *c);//加法操作 
void sub(int a[NUM]int b[NUM]int *c);//减法操作
void  mod(int a[NUM]int b[NUM]int  *c);//取余操作 
void  divnum(int t[NUM]int b[NUM]int  *c int *w);//试商法求解 
void mulmod(int a[NUM] int b[NUM] int n[NUM]int *m);// m=a*b mod n
void expandmod(int a[NUM] int p[NUM] int n[NUM]int *m);//m=a^p  mod n的函数
int prime_co(int e[NUM]int s[NUM]); // 求两个大数之间是否互质
void prime_random(int *pint *q);//产生随机数 
long  rsa(long plong qlong e);//求解密密钥d的函数(根据Euclid算法)
void loadpubkey(char *keyint e[NUM]int n[NUM]);  //导入公钥
void loadprikey(char *keyint d[NUM]int n[NUM]); //导入私钥
void savepubkey(int e[NUM]int n[NUM]);//导出公钥
void saveprikey(int d[NUM]int n[NUM]);//导出私钥
void  rsa_encrypt(char* in_file char* out_fileint e[NUM] int n[NUM]);//加密函数 
void  rsa_decrypt(char* in_file char* out_fileint d[NUM] int n[NUM]);//解密函数 
void sub(int a[NUM]int b[NUM]int c[NUM]);

struct rsalink

int  numcount[NUM];//用来标记正负号,1正,0负
    struct rsalink *next;
};

void  print(int a[NUM])//自定义数运算库,打印 
   {
   int i;
   for(i=0;i    printf(“%d“a[a[99]-i-1]);
   }

int cmpl(int a[NUM]int b[NUM])//比较判断 
{   int l1 l2;
int i;
l1=a[99];
l2=b[99];
if (l1>l2)
     return 1;
    if (l1       return -1;
    for(i=(l1-1);i>=0;i--)
   {
   if (a[i]>b[i])
   return 1 ;
   if (a[i]    return -1;
   }
    return 0;
}

void move(int a[NUM]int *b)//移位操作 
{
int j;
for(j=0;j b[j]=a[j];
}

void mul(int a[NUM]int b[NUM]int *c)//乘法操作 
{
 int ij;
 int y;
 int x;
 int z;
 int w;
 int l1 l2;
l1=a[NUM-1];
l2=b[NUM-1];
if (a[NUM-2]==‘-‘&& b[NUM-2]==‘-‘)
c[NUM-2]=0;
else if (a[NUM-2]==‘-‘)
c[NUM-2]=‘-‘;
else if (b[NUM-2]==‘-‘)
c[NUM-2]=‘-‘;
 for(i=0;i {
  for(j=0;j  {
     x=a[i]*b[j];
     y=x/10;
     z=x%10;
     w=i+j;
     c[w]=c[w]+z;
     c[w+1]=c[w+1]+y+c[w]/10;
     c[w]=c[w]%10;
  }
 }
 w=l1+l2;
 if(c[w-1]==0)w=w-1;
 c[NUM-1]=w;


void add(int a[NUM]int b[NUM]int *c)//加法操作 
{
 int il1l2;
 int lentemp[NUM];
 int k=0;
l1=a[NUM-1];
l2=b[NUM-1];
if((a[NUM-2]==‘-‘)&&(b[NUM-2]==‘-‘))
{
c[NUM-2]=‘-‘;
}
else if (a[NUM-2]==‘-‘)
{
move(atemp);
temp[NUM-2]=0;
sub(btempc);
}
else if (b[NUM-2]==‘-‘)
{
move(btemp);
temp[98]=0;
sub(atempc);
}
if(l1 else len=l2;
 for(i=0;i {
  c[i]=(a[i]+b[i]+k)%10;
  k=(a[i]+b[i]+k)/10;
 }
 if(l1>len)
 {
  for(i=len;i  {
   c[i]=(a[i]+k)%10

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     387072  2012-12-21 22:05  20101120068 杜磊 lab4\实验四报告.doc

     文件      18025  2012-12-21 20:57  20101120068 杜磊 lab4\杜磊 4.cpp

     文件      54258  2012-12-25 12:06  20101120068 杜磊 lab4\杜磊 4.exe

     目录          0  2012-12-25 12:39  20101120068 杜磊 lab4

----------- ---------  ---------- -----  ----

               459355                    4


评论

共有 条评论