资源简介

仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。加密函数:E(x) = (k1*x + k2) (mod m)=(k1*x)mod 26 +k2,D(x) = k1^{-1} (x - k2) (mod m),这是乘法逆元的解法,本程序采用枚举算法解出,附有详细注释+文本文档,乘法加密是字母对应是a-z对应1-25-0.

资源截图

代码片段和文件信息

%  **************************
%  * 仿射加密
%  * @author 王凌志
%  **************************
clc
clear
A=‘abcdefghijklmnopqrstuvwxyz‘;
B=‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘;
while(1)
k1=input(‘请设置密钥参数k1:‘);
k2=input(‘请输入密钥参数k2:‘);
    if gcd(k126)~=1
        fprintf(‘输入k1无效,请重新输入‘);
    else
        break
    end
end
x=input(‘请输入明文(小写):‘‘s‘);
d=length(x);
%******乘法加密**********%
for i=1:d
    for j=1:26
        if A(j)==x(i)
            m=j;
            if m==26
                m=0;
            end
            x1(i)=m;  %对应数字
            x2(i)=mod(m*k126);%%乘法加密结果
            continue
        end
    end
end

%将乘法加密的结果转换为密文%
for i=1:d
     m=x2(i);
    if x2(i)==0
        m=26;
    end
    x3(i)=A(m);%乘法加密后的密文
end


%******加法加密********%
B_k=[B(k2+1:end) B(1:k2)];%密文对照表
for i=1:d
    for j=1:26
        if A(j)==x3(i)
            x4(i)=B_k(j);
            continue
        end
    end
end
fprintf(‘密文:‘);
x4


    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1057  2019-04-15 21:23  aff.m

     文件       1007  2019-04-15 21:21  jiemi.m

     文件      14273  2019-04-15 21:24  加密.png

     文件      14137  2019-04-15 21:24  解密.png

     文件       1057  2019-04-15 21:27  jiami.txt

     文件       1007  2019-04-15 21:27  jiemi.txt

----------- ---------  ---------- -----  ----

                32538                    6


评论

共有 条评论