资源简介
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
- 下一篇:软件学院密码学实验五
相关资源
- 软件学院密码学实验五
- 卡尔曼滤波和互补滤波参考程序
- 基于MFC编写的读写USB_HID设备数据程序
- 第八届蓝桥杯省赛软件类C语言B组原题
- 端口转发-c++一个不错的参考
- 国密SM4的5种加密模式(ECB CBC CFB OFB
- C语言参考手册 C标准 (内含6个chm格式
- C/C++库函数参考手册中文版
- 新编Windows API参考大全全中文、win32
- libevent源码深度剖析 + libevent参考手册
- c语言参考手册.rar(内含3个chm格式手
- C语言库函数查询手册.chm
- arduino GCode_Interpreterdc G代码解释器 也
- FreeRTOS 官方 参考手册 英文
- STM32参考手册中文.pdf
- STM32F103中文教程及参考手册.pdf
- 《c语言参考手册》pdf
- 电子万年历Proteus仿真+源代码+原理图
- 2018版《计算机网络原理》习题参考答
- OpenCV函数参考手册(中文版).pdf
- 《C++面向对象程序程序设计》一书中
- 国密SM4的5种加密模式(ECB CBC CFB OFB
- C++ 参考手册/C语言参考手册.chm
- 谭浩强C语言程序设计习题参考解答
- STL参考手册
- 3GPP AMR-WB+的参考代码
- C++物流管理系统(功能结构图+源代码
- 数据结构第五章作业答案参考C语言
- 数据结构第二章作业答案参考C语言
- 数据结构第一章作业答案参考C语言
评论
共有 条评论