打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
古典密码之仿射密码

熟练掌握多表古典密码仿射密码加密算法原理及实现

根据仿射密码及其加解密算法,创建一个明文信息,再确定k1,k2,编写实现程序,实现加密和解密操作。

实验流程图:

找到桌面上的Microsoft Visual C++ 6.0,双击打开。

新建一个C++ Source File,文件名为fangshe。

将下面的代码输入。

图4

#include

#include

#include

int gcd(int a, int b) /*辗转相除法求a,b的最大公因数*/

{

int k=0;

do

{

k=a%b;

a=b;

b=k;

}while(k!=0);

return a;

}

int Ni(int a, int b) /*求a相对于b的逆*/

{

int i=0;

while(a*(++i)%b!=1);

return i;

}

void Affine() /*仿射密码*/

{

char c[100];

int length, i=0, ka=0, kb=0;

system('cls');

printf('********仿射密码*********\n请输入最初的明文: ');

gets(c);

length = strlen(c);

printf('请输入密钥(两数字):');

scanf('%d%d', &ka, &kb);

getchar();

while(gcd(ka,26)!=1)

{

printf('密钥输入错误,请重新输入');

scanf('%d%d', &ka, &kb);

getchar();

}

for(i=0; i

{

if(c[i]>96&&c[i]<>

c[i]=(ka*(c[i]-97)+kb)%26+97;

else if(c[i]>64&&c[i]<>

c[i]=(ka*(c[i]-65)+kb)%26+65;

}

printf('\n密文为:\n%s\n', c);

printf('按任何键返回……');

getch();

}

void exAffine() /*仿射解密*/

{

char c[100];

int length, i=0, ka=0, kb=0, tmp;

system('cls');

printf('********仿射密码********\n请输入最初的密文:');

gets(c);

length = strlen(c);

printf('请输入密钥(两数字): ');

scanf('%d%d', &ka, &kb);

getchar();

while(gcd(ka,26)!=1)

{

printf('密钥输入错误,请重新输入');

scanf('%d%d', &ka, &kb);

getchar();

}

for(i=0; i

{

if(c[i]>64&&c[i]<>

{

tmp= Ni(ka, 26)*((c[i]-65)-kb);

if(tmp<>

c[i]= tmp%26+26+65;

else

c[i]= tmp%26+65;

}

else if(c[i]>96&&c[i]<>

{

tmp= Ni(ka, 26)*((c[i]-97)-kb);

if(tmp<>

c[i]= tmp%26+26+97;

else

c[i]= tmp%26+97;

}

}

printf('\n明文为:\n%s\n', c);

printf('按任何键返回……');

getch();

}

int main()

{

char i= '0';

printf('********请按1~3选择:********\n');

printf('1.仿射加密\n2.仿射解密\n3.退出\n');

i= getch();

while(i!='3')

{

if(i=='1')

Affine();

else if(i=='2')

exAffine();

i=getch();

}

return 0;

}

Compile和Build之后发现没有错误,这个程序是正确的,然后点击F5运行。

输入想要加密的文字与密钥获取密文,并且小写加密为小写,大写加密为大写。

再进入解密模式输入密文与密钥获得明文,并且小写解密为小写,大写解密为大写。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
随机函数生成的数字 选择排序
continue与break
关于IDEA算法中循环左移的问题
实现整数转化为字符串函数itoa()函数
吐血,我密码箱密码忘了?
仿射简单的重组和简单的重组
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服