仿射密碼

仿射密碼是一種替換密碼。它是一個字母對一個字母的。

A055F
B12222W
C23913N
D3564E
E47321V
F59012M
G61073D
H712420U
I814111L
J91582C
K1017519T
L1119210K
M122091B
N1322618S
O142439J
P152600A
Q1627717R
R172948I
S1831125Z
T1932816Q
U203457H
V2136224Y
W2237915P
X233966G
Y2441323X
Z2543014O
展示 17x+5 的仿射密碼。首先字母被轉換成介於0到25的數字,下一步對每個套用 17x+5,結果再取除26後的餘數,最後再轉回字母。

它的加密函數是,其中

  • 互質
  • 是字母的數目。

解碼函數是,其中群的乘法逆元

仿射密碼 為 單表加密的一種,字母系統中所有字母都藉一簡單數學方程加密,對應至數值,或轉回字母。 其仍有所有替代密碼之弱處。所有字母皆藉由方程 加密, 為移動大小。

介紹编辑

於仿射加密中,大小為 之字母系統首先對應至 範圍內之數值, 接著使用模算數來將原文件中之字母轉換為對應加密文件中的數字。單一字母的加密函數為

取餘 為字母系統大小且 為密碼關鍵值。 之值必須使得 互質. 解密方程為

此處 取模 模反元素 of I.e., 滿足等式

之乘法逆元素僅存在於 互質條件下。 由此,沒有 的限制,可能無法解密。易知解密方程逆於加密方程。

弱處编辑

因爲仿射密碼仍爲單字母表密碼, 其依舊保留了該類別加密之弱處。當 ,仿射加密為 凱撒密碼 ,因該加密方程可簡化為線性移動。考慮加密英文。(即: ),不計26易凱薩密碼,總共有286非易仿射密碼。此數值是由於小於26之數中有12數與26互質。 ( 的可能值). 的每個值可有26互異之加法移動( 之值); 因此,共有 12*26 或 312 可能之關鍵值。 因为密码缺少复杂性,根据柯克霍夫原則,这套系统是不安全的。

此密碼之首要弱處為,如果密碼學家可發現(如 頻率分析, 暴力破解, 臆測或任何其他方法) 加密文件兩字元之原文,則關鍵值可透過解一方程組得到。 由於我們知道 互質,這個事實可被用於快速破解密碼。

仿射密碼中同種的轉換使用於線性同餘方法,為伪随机数生成器中的一種。此產生器不為密码学安全伪随机数生成器,因仿射加密不安全。

範例编辑

在以下一加密一解密的例子中,字母為從A至Z,且在表格中都有對應值。

ABCDEFGHIJKLMNOPQRSTUVWXYZ
012345678910111213141516171819202122232425

加密编辑

在加密範例中,[1] 使用前述表格中各字母對應之數值可知欲加密的原文件為 "AFFINE CIPHER" , 對應5, 對應 8, 而 對應 26 (因共使用26字母)。其中 之值必須與 的值26互質,所以其所有可能值包含1、3、5、7、9、11、15、17、19、21、23、25。若 ,則 之值可隨機選定(因為b只讓密文值平移而已)。所以,此加密範例的函數為 . 加密訊息的首步即為寫出每個字母的數字值。

原始文件:AFFINECIPHER
x:055813428157417

現在,取x各值並解等式的第一部份, 。 得出各字母對應 的值後,取其對26的餘數。以下表格為加密的首四步驟。

原始文件:AFFINECIPHER
x:055813428157417
83333487328184883432893
877222121822517215

加密訊息的最後一部,為查表求得對應字母的數值。 在此範例中,加密文本應為 IHHWVCSWFRCP。 以下表格顯示仿射加密一訊息的完整表格。

原始文件:AFFINECIPHER
x:055813428157417
83333487328184883432893
877222121822517215
加密文件:IHHWVCSWFRCP

解密编辑

於此解密範例中,欲解密之加密文件來自加密範例 。其解密方程為 ,經過計算, 為 21, 為8, 為 26。伊始之時,寫下加密文件中對應各字母之數值,如以下表格所示:

密文:IHHWVCSWFRCP
y:877222121822517215

下一步,計算 ,再取結果除以26的餘數。以下表格顯示兩者計算後的結果。

密文:IHHWVCSWFRCP
y:877222121822517215
21(y-8):0-21-21294273-126210294-63189-126147
(21(y-8)) mod 26:055813428157417

解密的最後一部,藉由表格將數值轉回字母。解密的原始文件為 AFFINECIPHER。 以下為完成解密後的表格:

加密文件:IHHWVCSWFRCP
y:877222121822517215
21(y-8):0-21-21294273-126210294-63189-126147
(21(y-8)) mod 26:055813428157417
原文件:AFFINECIPHER

全數字母加密编辑

為求加解密更快速,可加密全數字母以將原文件之字母一對一對應至加密文件。此範例中,一對一映射如下:

原文件中字母ABCDEFGHIJKLMNOPQRSTUVWXYZ
原文件中數字012345678910111213141516171819202122232425
(5x+8)mod(26)813182327121722161116210510152025491419243
加密文件字母INSXCHMRWBGLQVAFKPUZEJOTYD

程式實例编辑

Python 程式語言,以下代碼可用於加密羅馬字母A至Z。

# 列印仿射密碼的字母表。# a必須與m互質def affine(a, b):    for i in range(26):        print chr(i+65) + ": " + chr(((a*i+b)%26)+65)# 調用函數的例子affine(5, 8)

或者以Java作例:

public void Affine(int a, int b){    for (int num = 0; num < 26; num++)      System.out.println(((char)('A'+num)) + ":" + ((char)('A'+(a*num + b)% 26)) );}Affine(5,8)

或於 Pascal:

Procedure Affine(a,b : Integer);  begin    for num := 0 to 25 do      WriteLn(Chr(num+65) , ': ' , Chr(((a*num + b) mod 26) + 65);  end;begin  Affine(5,8)end.

PHP的實現:

function affineCipher($a, $b) {    for($i = 0; $i < 26; $i++) {        echo chr($i + 65) . ' ' . chr(65 + ($a * $i + $b) % 26) . '<br>';    }}affineCipher(5, 8);

參見编辑

參考文獻编辑

  1. ^ Kozdron, Michael. Affine Ciphers (PDF). [22 April 2014]. (原始内容存档 (PDF)于2016-04-09). 

外部链接编辑