今回はドラマ教場0に
Python言語が使われているシーンが有ったので
そのコードを解読してみました

解説動画はこちら



ドラマについて

ドラマ・教場0は月曜9時から放映されている
木村拓哉さん主演の刑事ドラマです

該当のシーンが登場するのは第8話

バディーには元乃木坂46の
白石麻衣さん

犯人役は小池徹平さんで
その犯人をどう追い詰めるか
どう解明したのかが
ドラマの終盤で分かってくるのが
見所となっています

今回のシーンは
犯人達が使用していたメールの中で
暗号が使用されているので
それを解読した、というものでした



暗号文

メールの暗号文はこんな感じ
mail0


簡単には読む事が出来ない文章になっていますねえ
これを木村さん演じる風間捜査官が
徹夜で解読した・・・という程で
解読後に助手の女性に伝えといてって
言った後にモニターに映し出されたのが
暗号解読のコードと思われます



暗号解読コード

code


凝を怠らずに良くみたら
見えてくるじゃないですかー
Pythonのコードが

という訳で
早速これをコードに起こしてみましょう


こんな感じになりました
# 読み取れませんでした
substitutions={
    
}
# 読み取れませんでした
rules ={
    
}

# 暗号文字列
encrypted_message = "5378eedafe206d6f7270656f7469632061c280996d2077616c"

# 16進数文字列をByte文字列に変換する
encrypted_bytes = bytes.fromhex(encrypted_message)

# ルールに沿ってByte文字列を置換する
for i in range(len(encrypted_bytes)):
    if encrypted_bytes[i] in rules.values():
        encrypted_bytes[i] = list(rules.keys())[rules.values()]
        
# ascii でデコードする
# 半角英数字 128文字を扱う文字コード , A : 0x41 , a : 0x61
decrypted_message = encrypted_bytes.decode("ascii")

# 文字列を置換する
for k,v in substitutions.items():
    decrypted_message = decrypted_message.replace(v,k)
print(decrypted_message)

さてこちらのコードを見ていきましょう

暗号は「換字式暗号」になっていると思われます

何かしらのルールに沿って
文字列を入れ替える事によって
元の平文が読める様になるというものです

暗号文が16進数文字列になっているので
それをBytes型に変換した上で
rulesの変数に定義した文字列で置換し
ascii でデコードします

最後にデコードした文字列を
substitutionsに定義した文字列で変換すれば
平文が完成する、というコードになっているようです

ただし
これを動かしてもうまくはいきません

rulesやsubstitutionsといった
変換用の変数の肝心の部分は
うまく全部読み取れなかったので
暗号解読コードとしては未完成になっています


とは言え
テレビドラマの中でPython言語が使われるのは
非常にめずらしく、喜ばしいことです!!


自分の記憶が確かなら
ブラッディ・マンデイというドラマで
三浦春馬演じる天才ハッカー:ファルコンが
ハッキングの際に使っていた言語が
Pythonだった以来です

ドラマでは、なかなかハッキング や
暗号解読を、真面目にやる事は無いから
ちゃんとしたコードが世に出ただけでも
うれしくなっちゃいますねー

肝心の暗号の方は
解読できていないので
それだけが心残り

その辺りまで、全部描写してくれる
ドラマをやってほしい

そう思う今日この頃でした
それでは