開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
今日読み始めた本、中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社)の前編(暗号の歴史あれこれ)、第1章(高校生、ダイヤモンドを盗まれる?! - アトバシュ式暗号)の暗号を作って解いてみよう(Par1)の解答をPythonで求めてみる。
コード
Python 3
#!/usr/bin/env python3 def atbash(letters: str) -> str: ''' >>> atbash('') '' >>> atbash('A') 'Z' >>> atbash('M') 'N' >>> atbash('AMZ') 'ZNA' ''' table = {chr(ord('A') + i): chr(ord('Z') - i) for i in range(26)} return ''.join([table[letter] for letter in letters]) if __name__ == '__main__': import doctest doctest.testmod() letters_list = ['HVRHFF', 'ZMTLL', 'GZBOLI', 'HDRU'] for letters in letters_list: print(f'暗号: {letters}、復号化: {atbash(letters)}')
入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))
C:\Users\...>py -3 sample1.py -v Trying: atbash('') Expecting: '' ok Trying: atbash('A') Expecting: 'Z' ok Trying: atbash('M') Expecting: 'N' ok Trying: atbash('AMZ') Expecting: 'ZNA' ok 1 items had no tests: __main__ 1 items passed all tests: 4 tests in __main__.atbash 4 tests in 2 items. 4 passed and 0 failed. Test passed. 暗号: HVRHFF、復号化: SEISUU 暗号: ZMTLL、復号化: ANGOO 暗号: GZBOLI、復号化: TAYLOR 暗号: HDRU、復号化: SWIF C:\Users\...>
ということで、整数、暗号、Taylor、Swif。結果を見ると、4つの暗号ではなく一行一暗号で、整数暗号、Taylor Swifみたい。ただTaylor SwifではなくTaylor Swiftで誤植っぽい?
Taylor Swiftと表示されるように、そして一行一暗号にプログラムのコードを修正。
コード
Python 3
#!/usr/bin/env python3 def atbash(letters: str) -> str: ''' >>> atbash('') '' >>> atbash('A') 'Z' >>> atbash('M') 'N' >>> atbash('AMZ') 'ZNA' ''' table = {chr(ord('A') + i): chr(ord('Z') - i) for i in range(26)} # スペースの分も追加 table.update({' ': ' '}) return ''.join([table[letter] for letter in letters]) if __name__ == '__main__': import doctest doctest.testmod() # 2つ目の最後にGを追加 letters_list = ['HVRHFF ZMTLL', 'GZBOLI HDRUG'] for letters in letters_list: print(f'暗号: {letters}、復号化: {atbash(letters)}')
入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))
C:\Users\...>py -3 sample1.py 暗号: HVRHFF ZMTLL、復号化: SEISUU ANGOO 暗号: GZBOLI HDRUG、復号化: TAYLOR SWIFT C:\Users\...>
この後読み進めていったら、p.20に「TAILOR SWFIT」、歌姫テイラースウィフトとあったので、誤植だったみたい。そして、この部分もTA"Y"LORではなくTA"I"LORと誤植?
報告場所があってるかわからないけど、問い合わせで一応報告してみた。
p.17 HDRU -> HDRUG p.20 TAILOR SWFIT -> TAYLOR SWFIT ではないかと。
さらに細かいこととして、暗号はANGOOではなくANGOUだったり。
0 コメント:
コメントを投稿