首页 > 编程知识 正文

c语言仿射密码加密解密,仿射密码例题

时间:2023-05-06 06:22:47 阅读:186240 作者:1152

仿射密码(c语言实现)简介仿射密码是表单替换密码,使用简单的数学函数将数值与对应于字母各字符的值对应起来,将对应的数值转换为字符。

加解密官方加密函数:

y=(axb ) &;

解密函数:

x=(a的逆元) (y-b ) &;

请正式来

加密函数:E(x) = (ax + b) (mod m)

解密函数:D(x) = (x - b) (mod m)其中a是组乘法的倒数。

c语言实现# include stdio.h # include string.h//加密intencrypt(char*text,char *result,int k1,int k2 ) intI,z=0; intL=Strlen(Text ); //获取明文长度for (I=0; il; I ) ) /区分大小写if(text[I]='a'text[I]='z ' ) (result[z]=(K1*(text[I]-'a ' ) k2 ) ) ) a; }elseif(text[I]='a'text[I]='z ' ) result[z]=(K1*(text[I]-'a ' ) k2 ) ) a ); } else{ //空格result[z]=text[i]; (z; } return 0; //intdecrypt(char*text,char *result,int k3,int k2 ) ) intI,z=0; intL=Strlen(Text ); //获取明文长度for (I=0; il; I ) ) /区分大小写if(text[I]='a'text[I]='z ' ) result [ z ]=(k3 * ((text [ I ]-' a '-k2 ) ) ) ) }elseif(text[I]='a'text[I]='z ' ) result [ z ]=(k3 * ((text [ I ]-' a '-k2 ) ) ) (a ); if(K3* ) (text[I]-'a ' )-k2 )0) /处理负数result[z]=result[z] 26; } } else{ //空格result[z]=text[i]; (z; } return 0; }int main () { char text[50]=' '; char result[50]=' '; int k1、k2、k3; int type; /**欢迎使用**/printf('--------欢迎使用仿射密码--------n ' ); printf (“请填写明文或密文。 n )”scanf('%[^n] )、text ); printf ('请选择加密方法,输入1加密、2解密n ); scanf('%d ',type ); 请输入if(type==1) { /**加密**/printf ('密钥k1n ' ); scanf('%d ',k1 ); 请输入printf ('密钥k2n ' ); scanf('%d ',k2 ); encrypt(text,result,k1,k2 ); printf (明文%s的密文为:%s(n )、text、result ); }elseif(type==2) (/**解密(**/printf ) )“请输入密钥k1的倒数n”扫描(“% d”,k3 ); 请输入printf ('密钥k2n ' ); scanf('%d ',k2 ); ecrypt(text,result,k3,k2 ); printf (密文%s的明文为:%s(n )、text、result ); } return 0;加密

明文AFFINECIPHER,k1=5,k2=8

解密

密文IHHWVCSWFRCP,k1=5的逆元21,k2=8

没有写缺陷逆元。 请在理解之后再来。 这里表示逆元表

稍后再优化

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。