willing 发表于 2024-1-12 19:48:18

山东大学 信息安全playfair密码编写

plain=input('请输入明文','s');
key=['M','O','N','A','R';
'C','H','Y','B','D';
'E','F','G','I','K';
'L','P','Q','S','T';
'U','V','W','X','Z'];
l=length(plain);
if mod(l,2)==1
plain(l+1)='x';%如果长度为奇数就再末尾加一个'x',并且使得长度加 1
l=l+1;
end
for i=1:length(plain)-1
if (plain(i)==plain(i+1))&&(mod(i,2)==1)
str=plain(i+1:end);%用 str 记下
plain=;%使用连接的方式将 x 插入到两端字符中间
end
end
cypher=upper(plain);%大写后才可与 key 中的字母替换
m = -1;
n = -1;
M = -1;
N = -1;
for i = 1:2:length(cypher)-1
for j = 1:5
for k = 1:5
if cypher(i) == key(j, k)
m = j; %用 m 记下两两分组子母中第一个子母的行
M = k; %用 M 记下两两分组字母中第一个字母的列
end
if cypher(i+1) == key(j, k)
n = j; %同上记下第二个字母的行
N = k; %同上记下第二个字母的列
end
end
end
if m == n
if (M<5)&&(N<5)
cypher(i)=key(m,M+1);
cypher(i+1)=key(n,N+1);
elseif M==5
cypher(i)=key(m,1);
elseif N == 5
cypher(i+1)=key(n,1);
end
elseif M==N
if(m<5)&&(n<5)
cypher(i)=key(m+1,M);
cypher(i+1)=key(n+1,N);
elseif m==5
cypher(i)=key(1,M);
elseif n==5
cypher(i+1)=key(1,N);
end
elseif (m ~= n) && (M ~= N)
cypher(i) = key(m, N);
cypher(i + 1) = key(n, M);
end
end
disp(cypher);
页: [1]
查看完整版本: 山东大学 信息安全playfair密码编写