問題

可換暗号の問題. 暗号化のために可換テーブルを利用する。

<p>
  ところが、この可換テーブルがなくなってしまった。
</p>

<p>
  a,b, y が与えられるので a -> b の変換を手がかりにして、 暗号化されたy から 復号化された文字列xを求めよ。
</p>

方針

可換テーブルを b->aの複合ルールから求めてそれを y に適用する.

<p>
  文字が25文字のとき、全てのアルファベットの中で利用されていない 文字を調べてテーブルに追加する必要がある.
</p>

回答

[sourcecode language="python" title="" ] allchar = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ") class SubstitutionCipher: def notIn(self, s): return "A"

<p>
  def decode(self, a, b, y): cipher = {}
</p>

<p>
  for i in range(len(a)): cipher[b[i]] = a[i]
</p>

<p>
  if len(cipher) == 25: remain_a = list(set(allchar) - set(a))[0] remain_b = list(set(allchar) - set(b))[0] cipher[remain_b] = remain_a
</p>

<p>
  x = "" for i in range(len(y)): if y[i] not in cipher: return "" x += cipher[y[i]]
</p>

<p>
  return x [/sourcecode]
</p>