1. 程式人生 > >密碼演算法(2)之凱撒密碼

密碼演算法(2)之凱撒密碼

摘要

本文主要講述凱撒密碼。

1. 這是什麼鬼?

凱撒密碼是一種早期的簡單的對稱密碼,金鑰可以用來加密和解密。其又被稱為移位密碼——很形象!

2. 凱撒密碼的原理

明文:={ 英文字元號串 }

金鑰:=key取{ 0,1,2,...,25 }中任一個數字

加密c(i):=[ m(i)+key mod 26 ]

解密m(i):=[ c(i)-key mod 26 ]

3. 演算法實現

function Y=caesarCode(plaintext, shift)
chars = ['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'];
L=length(plaintext);
for i=1:L
      for j=1:26
          if plaintext(i)==chars(j)
              k=mod(j+shift,26);
              if k~= 0
                  Y(i)=chars(k);
              else
                  Y(i)=chars(26);
              end
          end
      end
end

4. 經典題目

如果明文資訊為‘cryptoisfun’,使用凱撒加密演算法,且金鑰為25,那麼加密的結果是?請選擇!

a. dszqupjtgvo

b. bqxosnhretm

c. tyxpbqmgien

d. none of the above 

5. 參考答案

>> caesarCode('cryptoisfun',25)
ans =
bqxosnhretm
所以選擇b選項。

6. 安全性分析

本文例子中,凱撒密碼的金鑰空間大小隻有32個金鑰,演算法的安全性太差,很容易對密碼進行破解。我們不妨暴力一個一個破解。

>> for i=1:26
caesarCode('bqxosnhretm',i)
end

7. 破解結果

暴力破解結果的數目等於凱撒密碼金鑰空間的大小,刪除掉一些沒實際語言意義的,剩下一些看得懂的語句

ans =
cryptoisfun
ans =
dszqupjtgvo
ans =
etarvqkuhwp
ans =
fubswrlvixq
ans =
gvctxsmwjyr
ans =
hwduytnxkzs
ans =
ixevzuoylat
ans =
jyfwavpzmbu
ans =
kzgxbwqancv
ans =
lahycxrbodw
ans =
mbizdyscpex
ans =
ncjaeztdqfy
ans =
odkbfauergz
ans =
pelcgbvfsha
ans =
qfmdhcwgtib
ans =
rgneidxhujc
ans =
shofjeyivkd
ans =
tipgkfzjwle
ans =
ujqhlgakxmf
ans =
vkrimhblyng
ans =
wlsjnicmzoh
ans =
xmtkojdnapi
ans =
ynulpkeobqj
ans =
zovmqlfpcrk
ans =
apwnrmgqdsl
ans =
bqxosnhretm
顯然,只有當加密key==25(即解密key==1)時,破解結果才是有語義意義的,即明文很可能是“cryptoisfun”