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

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

他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 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种可能,所以采用遍历法,根据解密结果的实际含义来推断出加密前的内容。

  • 18
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值