#include "stdlib.h"
unsigned long n;
int e,d;
unsigned p,q;
unsigned char text_8[100];
unsigned text_16[100],secu_16[100];
void public_key_product();
void person_key_product();
int gcd(unsigned long,unsigned long);
unsigned power(unsigned,unsigned,unsigned long);
void convert_16_to_8(unsigned a[100]);
void convert_8_to_16();
void coder();
void decoder();
void get();
main()
{
while(getch()!='e')
{
clrscr();
printf("Please enter your text to coded:\n");
get();
public_key_product();
person_key_product();
coder();
printf("\nThe coded is:\n%s",text_8);
getch();
printf("\n(d=%d,n=%lu)",d,n);
decoder();
printf("\nThe code is\n%s",text_8);
}
}
void get()
{
printf("Enter the text('e' to exit):\n");
scanf("%s",text_8);
}
int gcd(unsigned long a,unsigned long b) /*The gcd(),you can get gcd((p-1),(q-1))*/
{
unsigned long c;
if(a>=b)
{
c=a%b;
if(c==0)
return 0;
else if (c==1)
return 1;
else gcd(b,c);
}
else gcd(b,a);
}
void public_key_product() /*The public_key*/
{
e=3;
p=2*random(50000)+1+30000;
while(!is_number(p)&&p<65536);
{
p+=2;
}
q=2*random(10000)+1+30000;
while(!is_number(q)&&q<65536);
{
q+=2;
}
n=(unsigned long )p*(unsigned long)q;
while(!gcd((unsigned long )(p-1)*(unsigned long )(q-1),e))
e++;
printf("(e=%d,n=%lu)",e,n);
}
void person_key_product() /*The person_key*/
{
int i=1;
while((((p-1)*(q-1)*i+1)%e)&&i>0)
i++;
d=((p-1)*(q-1)*i+1)/e;
}
int is_number(unsigned n) /*The is_numer,you can get n*/
{
unsigned m=1,b=0,a,j=n-1,i,z;
while(!j%2)
{
m*=2;
b++;
j/=2;
}
m=(n-1)/m;
a=random(n-1);
for(j=0;j<1000;j++)
{
a+=2;
if(a>2)
{
i=0;
z=power(a,m,n);
if((z!=1)&&(z!=(p-1)))
return 0;
while((i<b)&&(z!=(p-1)))
{
if((i>0)&&(z==1))
return 0;
z=power(z,2,p);
i+=1;
}
if(z!=(p-1))return 0;
}
return 1;
}
}
unsigned power(unsigned a,unsigned b,unsigned long c) /*The power,you can get a,b,c*/
{
unsigned long z=1,t;
for(t=a;b>0;b>>=1)
{
if(b%2==1)z=(z*t)%c;
t=(t*t)%c;
}
return z;
}
void convert_8_to_16()
{
int i;
for(i=0;i<100;i++)
text_16[i]=text_8[2*i]*256+text_8[2*i+1];
}
void convert_16_to_8(unsigned a[100])
{
int i=0,flag=0;
unsigned temp;
while(i<200&&flag<100)
{
temp=a[flag]/256;
text_8[i]=temp;
text_8[i+1]=a[flag]%256;
i+=2;
flag++;
}
}
void coder()
{
int i;
i=0;
convert_8_to_16();
while(text_16[i]!=0)
{
secu_16[i]=power(text_16[i],e,n);
i++;
}
convert_16_to_8(secu_16);
}
void decoder()
{
int i;
i=0;
while(secu_16[i]!=0)
{
text_16[i]=power(secu_16[i],d,n);
i++;
}
convert_16_to_8(text_16);
}
四散
- 粉丝: 69
- 资源: 1万+
最新资源
- HX711电子称重报警系统 源码+仿真软件的 基于型号为STC89C52的单片机、质量称重传感器HX711、液晶显示器1602、报警传感器等设计了一款液晶显示、阈值报警的电子
- HX711模块称重51单片机电子秤称重压力检测阈值报警仪系统 源码+原理图仿真(文件,文件,文件) 本系统由STC89C52单片机、LCD1602液晶显示、HX711称重传感器、 蜂鸣器报警、按键及
- 电动汽车概率分布模型代码 采用蒙托卡罗模拟方法 电动汽车行驶距离服从对数正态分布 充电时刻服从正态分布 设定充放电功率的上下限和充电效率 最终得到电动汽车功率的时序动态特征曲线
- 光伏并网逆变器设计方案,附有相关的matlab电路仿真文件,以及DSP的程序代码,方案、仿真文件、代码三者结合使用效果好,事半功倍
- 基于FPGA的视觉跟踪系统,配合舵机云台跟踪单色物体,例如乒乓球 vivado工程,基于Basys3板卡 注意:不硬件部分
- MATLAB数据分析,基于遗传算法,粒子群优化算法优化BP神经网络GA-BP和PSO-BP的数据回归预测,LSSVM的粒子群优化算法和灰狼优化算法,径向基函数RBF(pso-rbf)预测,极限学习机E
- 微网优化模型 多目标matlab 编程语言:matlab 方法:多目标粒子群mopso 内容摘要:考虑风光储的独立微网优化模型,以经济性和可靠性作为目标,考虑蓄电池荷电状态约束、充放电功率约束以及发电
- 西门子1200PLC大型项目包膜机程序,气缸,通讯,机械手,模拟量等,各种FB块,可用来参考和学习 软件博图,威纶通触摸屏,网络结构可参考图一,PTO控制20多个轴,100多个气缸,控制2台机器人
- 西门子plc200smart与施耐德ATV12变频器modbus通讯程序,可以帮你学会modbus通讯,是程序,说明书,接线定义,参数调试
- 风力 光伏发电机mppt
- 西门子PLC做的电池焊接程序,电池包里面有n*m行列个电池,主要功能: 1.每个电池的焊点坐标能够独立调整 2.每个电池的焊接能量可独立选择 3.任意一个或者多个电池可以随机选择不焊接 4.可以选择某
- 档案数字化加工平台,实现数字化加工流程化管理,扫描,批量修图,ocr著录,流程控制
- Delta 台达,AS228T,plc程序模板和触摸屏程序模板,目前6个总线伺服,采用CANOPEN,适用于运动轴控制,程序可以在自动的时候暂停进行手动控制,适用于一些中大型设备,可以防止某个气缸超时
- S7-1200PLC运动控制程序-结构化编程控制5轴伺服项目每一功能 具有一个项目都有的功能:自动-手动-单步-暂停后原位置继续运行-轴断电保持-报警功能-气缸运行及报警. 2.每个功能块可以无数次重
- 西门子1200程序,三轴伺服联动,通过与上位机TCP IP通讯反馈相机检测数据转化为实际坐标偏差值进行引导纠偏
- 关键词:共享储能;储能电站服务;冷热电多微网;双层规划;KKT 条件;Big-M 法; 主题:基于储能电站服务的冷热电多微网系统双层优化配置 建立考虑两个不同时间尺度问题的双层规划模型,上层模型负责
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0