Transposition-Cipher

獲得轉調鍵的反轉

  • March 4, 2016

我是安全方面的新手,我對轉置密碼學的密鑰有一些疑問。

如果我獲得了轉置密碼的編碼密鑰,我如何獲得它的解碼密鑰?我嘗試使用Google搜尋,但找不到任何計算步驟。例如,在幾個與加密貨幣相關的網站上有這些漂亮的工具,當我進入時,4 3 1 6 2 5我會得到3 5 2 1 6 4……但為什麼以及如何

密鑰是通過反向執行加密步驟獲得的。

例如,讓我們用那個4 3 1 6 2 5密鑰加密單詞“United”。第一步是取第 4 個字母,一個“t”並使其成為第一個。

在解密的時候,這個第一個密文字母必須再到第4位。

所以解密的第四步,必須看第一個位置是什麼——一個“t”——然後再把它放回第四位。事實上,我們在解密密鑰中看到“1”是它的第四個成員的值。

通過繼續這些步驟,您可以導出逆密鑰。

這是一個進行計算的小程式碼片段。

static int[] inverse_key( int[] key )
{
   int[] inverse_key = new int[ key.length ];
   for ( int i = 0; i < key.length; i++ )
   {
       inverse_key[ key[ i ] - 1 ] = i + 1;
   }
   return inverse_key;
}

程式碼中的“-1”和“+1”是因為大多數程式語言中的數組都是從0開始的;它們與實際算法無關。

這更像是一種置換密碼而不是轉置密碼。

關於原則,如果你有你的鑰匙:

  ENCRYPTION
position -- key
  1         4
  2         3
  3         1
  4         6
  5         2
  6         5

因此,考慮到 6 個輸入塊 : a b c d e f,您將 :

a進入第 4 個位置。

b轉到第 3 位……

以此類推。這將導致 : c e b a f d

現在,如果你想反轉這個變換,(c e b a f d $ \mapsto $ a b c d e f).

然後你可以看到 :

c轉到第三個位置。

e排在第 5 位……

以此類推……

這給了你:

  Decryption
position -- key
  1         3
  2         5
  3         2
  4         1
  5         6
  6         4

僅給定數字,如何生成解密密鑰?

  1. 反轉列
   ENCRYPTION           DECRYPTION
position -- key   =>   position -- key
  1         4           4         1
  2         3           3         2 
  3         1           1         3
  4         6           6         4
  5         2           2         5
  6         5           5         6
  1. 重新排序解密部分的位置列表。
   DECRYPTION           DECRYPTION
position -- key   =>   position -- key
  4         1           1         3
  3         2           2         5 
  1         3           3         2
  6         4           4         1
  2         5           5         6
  5         6           6         4

有點形式主義(缺乏):

你需要確保 $ \forall i, D(E(i)) = i $ 在哪裡 $ E $ 是加密和 $ D $ 解密。

讓我們考慮以下情況 $ i $ 是 $ 1 $ ,因此我們有 $ E(1)=3 $

讓我們替換之前的等式: $ D(E(1)) = 1 \iff D(3) = 1 $

因此在解密過程中 $ 3 \mapsto 1 $
通過這樣做與另一個 $ i $ 你可以構造你的解密密鑰。

是的,反函式的建構方式與替換密碼類似。

引用自:https://crypto.stackexchange.com/questions/33368