当前位置: 代码迷 >> 综合 >> 现代密码学实验1 LFSR 仿射密码算法
  详细解决方案

现代密码学实验1 LFSR 仿射密码算法

热度:67   发布时间:2023-11-21 17:05:21.0

赞赏码 & 联系方式 & 个人闲话

【实验名称】 古典密码                        

 

【实验目的】

1、LFSR实验:通过实验熟练掌握LFSR的工作原理,加深对古典密码体制的了解,为深入学习密码学奠定基础。

2、仿射密码算法实验:通过实验熟练掌握仿射密码算法的加密解密过程,加深对古典密码体制的了解,为深入学习密码学奠定基础。

 

【实验原理】

1、LFSR实验:考虑一个长度为m的线性递归关系(系数是整数):若给出了初始值:x1,x2,…xm,, 则xn的所有序列值都可以使用递归计算出来,这个由0和1组成的结果序列可用来作为加密的密钥。优点:一个周期非常长的密钥可以用非常少的信息来产生。

2、仿射密码算法实验:设两个整数α和β,及gcd(α,26)=1。加密过程:x → αx+β (mod 26),解密过程:x → α*(x-β) (mod 26),其中α?α*= 1(mod 26)。

这种加密方法的密钥就是一对(α,β),对gcd(α,26)=1中的α有12种可能的选择,对β有26种选择(因为用mod 26来计算,所以仅需要考虑介于0~25之间的α和β,因此密钥值一共有12?26=312种选择。

 

【实验内容】

1、LFSR实验:计算递归式子xn+5≡xn+xn+2(mod 2)的前50项,初始值为0,1,0,0,0。

本题实际上是使用线性反馈移位寄存序列来产生加密密钥流,其线性表达式也较为简单即使用前第5个数值和前第3个数值即可产生当前这一位的数值。根据这一想法可编写以下Matlab代码。

function lab2_1()
x=[0,1,0,0,0];
for i=6:50x(i)=mod(x(i-5)+x(i-3),2);
end
for i=1:50fprintf('%d ',x(i));
end
end

运行结果如下:

 

2、仿射密码算法实验:下列密文是用仿射密码加密的:edsgickxhuklzveqzvkxwkzukcvuh,请解密。

根据仿射密码加密原理,我们可以知道解密需要将α的逆乘以(x-β)在模上26。在这里我们并不知道α和β的具体取值,所以我采用枚举的方法寻找α和β。考虑到α需要和26互质,所以一共有1,3,5,7,9,11,15,17,19,21,23,25这12种取值,β一共有0~25共26种取值,总共需要枚举12?26=312次,这种计算量对于计算机来说是完全可以接受的。根据以上分析,编写出以下Matlab代码(代码解释详见注释)。

function lab2_2()
clc;
%26个字母
S=['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','z'];
%待解密的密文
X='edsgickxhuklzveqzvkxwkzukcvuh';
%密文转换为对应序号
for i=1:size(X,2)for j=1:size(S,2)if X(i)==S(j)x(i)=j-1;endend
end
num=1;
%使用枚举进行解密,结果保存在X中
alpha=[1,3,5,7,9,11,15,17,19,21,23,25];
for i=1:12for j=0:25a=mod(alpha(i)*(x-j),26);X(num,:)=S(a+1);num=num+1;end
end
%输出解密的明文
disp(X);           
end

运行结果如下(截取部分):

从312个结果中,我们不难挑选出具有实际语意的结果(红色下划线标出):if you can read this thank a teacher,这就是我们希望解得的明文。