2019年3月5日火曜日

開発環境

中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社))の前編(暗号の歴史あれこれ)、第2章(またまた被害に - シーザー式暗号とエニグマ暗号機)の暗号を作って解いてみよう(Part 3 (シーザー式暗号))の解答をPythonで求めてみる。

コード

Python 3

#!/usr/bin/env python3


def decode(code: str, key: int) -> str:
    alphabet = [chr(ord("A") + i) for i in range(26)]
    shift = {a: alphabet[i-key] for i, a in enumerate(alphabet)}
    return ''.join([shift[c] for c in code])


if __name__ == '__main__':
    code = 'GJQZVIYKZVXZ'
    for key in range(26):
        print(f'キー: {key:>2} 復号化: {decode(code, key)}')

入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))

C:\Users\...>py -3 sample1.py
キー:  0 復号化: GJQZVIYKZVXZ
キー:  1 復号化: FIPYUHXJYUWY
キー:  2 復号化: EHOXTGWIXTVX
キー:  3 復号化: DGNWSFVHWSUW
キー:  4 復号化: CFMVREUGVRTV
キー:  5 復号化: BELUQDTFUQSU
キー:  6 復号化: ADKTPCSETPRT
キー:  7 復号化: ZCJSOBRDSOQS
キー:  8 復号化: YBIRNAQCRNPR
キー:  9 復号化: XAHQMZPBQMOQ
キー: 10 復号化: WZGPLYOAPLNP
キー: 11 復号化: VYFOKXNZOKMO
キー: 12 復号化: UXENJWMYNJLN
キー: 13 復号化: TWDMIVLXMIKM
キー: 14 復号化: SVCLHUKWLHJL
キー: 15 復号化: RUBKGTJVKGIK
キー: 16 復号化: QTAJFSIUJFHJ
キー: 17 復号化: PSZIERHTIEGI
キー: 18 復号化: ORYHDQGSHDFH
キー: 19 復号化: NQXGCPFRGCEG
キー: 20 復号化: MPWFBOEQFBDF
キー: 21 復号化: LOVEANDPEACE
キー: 22 復号化: KNUDZMCODZBD
キー: 23 復号化: JMTCYLBNCYAC
キー: 24 復号化: ILSBXKAMBXZB
キー: 25 復号化: HKRAWJZLAWYA

C:\Users\...>

ということで、解読結果はキーが21の場合の「love and peace(LOVEANDPIECE)」。

0 コメント:

コメントを投稿