资源简介
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
- 上一篇:软件学院密码学实验五sha
- 下一篇:软件学院密码学实验五
相关资源
- 合泰触摸单片机BS84B08C实际应用代码上
- ADS1256-STM32参考程序
- 新编Windows API参考大全.doc
- LVGL 英文参考手册
- C语言程序设计教材习题参考答案.do
- 《面向对象的程序设计语言——C++》
- c++语言程序设计第三版清华大学出版
- 新概念C++程序设计大学教程第2版张基
- C++数字水印完整系统参考
- 数据结构与算法分析C++语言描述第四
- UART串口通信论文参考
- C语言参考手册 第五版 PDF扫描无水印
- GDI+SDK参考文档
- C语言试题集-高清版含参考答案.pdf
- Visual_C++程序设计与应用教程课后答案
- MPEG-2视频编解码参考代码
- 参考文献管理系统(PowerBuuilderMySQLM
- C语言参考手册第五版(高清PDF中文版
- C++ STL参考手册
- Microsoft Win32 程序员参考大全5.pdf(6个
- QT实现的聊天界面,好友列表,支持文
- 计算机图形学大作业参考代码(VC版)
- 标准模板库自修教程与参考手册 STL进
- 对无线传感器网络(WSN)中参考广播
- stan参考手册
- WindowsAPI参考大全forCC++(chm)
- C++11教程参考书
- RDA5820技术资料参考源码
- C/C++参考手册大全5本集合.chm
- 清华大学郑莉C++课件 PPT及例题源码
评论
共有 条评论