• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

凯撒密码加密和解密MATLAB实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行.

他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 的时候,所有的字母 A将被替换成 D,B 变成 E,以此类推 X 将变成 A,Y 变成 B,Z 变成 C。由此可见,位数就是凯撒密码加密和解密的**。

一.MATLAB 程序代码如下:

  1. 凯撒密码加密函数:
function Y=caesarCode(X,K)
%其中X表示明文,K表示**
A=['z','a','b','c','d','e','f','g','h','i','j','k','l','m','n',...
      'o','p','q','r','s','t','u','v','w','x','y'];
B=['Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'];
L=length(X);%获取明文的长度
for i=1:L
    emp=abs(X(i));%获取明文对应的ASCII码
    if emp>=97 & emp<=123 %小写字母a到z的ASCII码是97~123
      for j=1:26
          if X(i)==A(j)%判断是哪一个小写的26个字母
         n=mod(j+K-1,26);%由于是从z开始而不是从a开始所以要减1才是真正移动的位数
Y(i)=A(n+1);
end
      end
    elseif emp>=65 & emp<=90
for j=1:26
          if X(i)==B(j)%判断是哪一个大写的26个字母
         n=mod(j+K-1,26);
Y(i)=B(n+1);
end
end
    else
        Y(i)=X(i);%对标点和空格等其他字符保持原状
    end
end

  1. 加密主函数:
clc,clear;
string='I am a good boy';
len=20;Y=caesarCode(string,len);%调用CaesarCode函数加密
disp('凯撒加密后的输出为:');
disp(Y);

  1. 解密函数:
function Y=Caesarjiemi(string,key)
%其中string表示密文,key表示**
A=['z','a','b','c','d','e','f','g','h','i','j','k','l','m','n',...
      'o','p','q','r','s','t','u','v','w','x','y'];
B=['Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'];
L=length(string);  %获取密文的长度
for i=1:L
    emp=abs(string(i));%获取密文所有符号对应的ASCII码
    if emp>=97 && emp<=123 %小写字母a到z的ASCII码是97~123
      for j=1:26
          if string(i)==A(j)%判断是哪一个小写字母
         n=mod(j-key-1,26);%由于是从z开始而不是从a开始所以要减1才是真正移动的位数
Y(i)=A(n+1);
end
      end
    elseif emp>=65 && emp<=90%判断是哪一个大写字母
for j=1:26
          if string(i)==B(j)%判断是哪一个大写字母
         n=mod(j-key-1,26);
Y(i)=B(n+1);
end
end
    else
        Y(i)=string(i);   %对标点和空格等其他字符保持原状
    end
end

  1. 解密主函数:
clc,clear;
for key=1:26
    str='C ug u aiix vis';
    disp(['第',num2str(key),'次']);
    Y=Caesarjiemi(str,key)
end

二.实验结果:

1.对字符串‘I am a good boy’加密,加密后的字符串为‘C ug u aiix vis’,实验截图如下:

2.解密是加密的反过程,解密如下:

在第20次尝试时得到正确结果。由于凯撒密码的秘钥只有26种可能,所以采用遍历法,根据解密结果的实际含义来推断出加密前的内容。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi 运行错误信息。 - Delphi2010_老赵发布时间:2022-07-18
下一篇:
Delphi 运行时错误信息表发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap