現代密碼學實驗1 LFSR & 仿射密碼算法

讚賞碼 & 聯繫方式 & 個人閒話

【實驗名稱】 古典密碼                        

 

【實驗目的】

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:50
    x(i)=mod(x(i-5)+x(i-3),2);
end
for i=1:50
    fprintf('%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;
        end
    end
end
num=1;
%使用枚舉進行解密,結果保存在X中
alpha=[1,3,5,7,9,11,15,17,19,21,23,25];
for i=1:12
    for j=0:25
        a=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,這就是我們希望解得的明文。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章