開発環境
- 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 コメント:
コメントを投稿