Mixed alphabet

通常のアルファベットの並び ABCDEF… ではなく、その順番を変えて使用することで各種暗号の強度を一段回上げることができます。例えば
CIPHERABDFGJKLMNOQSTUVWXYZ
という並びのテーブルを使えば、ROT13もC->L, I>-M, P->N という変換に変わります。
Vigenere, Playfair等も異なる並び順を使うことでさらに破りにくくすることができます。本当にバラバラの並び順を使用した場合、十分に長い英語の文章とかならともかく、パズルのレベルではテーブルを知らずに解くのは基本的に無理だと思います。

Mixed alphabetについては全体をランダムに並べ替えることもありますが、上の例のようにキーワードを最初に並べ、残りの文字を後に続ける生成方法も使われます。
これについてコードを準備しました。

def mixed_alphabet(keyword, combined=False):
    kw_alphabet_added = keyword.upper() + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if combined:
        kw_alphabet_added = kw_alphabet_added.replace("J","I")

    already_appeared=[]
    result =""
    for s in kw_alphabet_added:
        if not s in already_appeared:
            result+=s
            already_appeared.append(s)
    return result

Polybiusのように方陣で使う際にはIとJを同一視して25文字で使用する事が多いため、2つ目の引数をそのオプションに使用しています。

 

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中