[Python]合言葉でテキストファイルの暗号化・復号化ファイル書き出し
1.テキストファイルの暗号化・復号化
合言葉を決めてテキストファイルを暗号化・復号化したものを書き出すスクリプトを作成します。スクリプトにはコマンドライン上で第一引数にファイルのパスを、第二引数に暗号か復号かの文字列を、第三引数に合言葉を渡します。
2.コード
今回対象とするテキストは以下のmessage.txtです。
from sys import argv
from statistics import median
script_name, file_path, mode, watchword = argv
enc_list = []
dec_list = []
#暗号化
def enc(line, watchword):
wtd = round(median([ord(e) for e in watchword])) // 10
crypt_message = "".join([chr((ord(x) + wtd)) for x in line])
return crypt_message
#復号化
def dec(line, watchword):
wtd = round(median([ord(e) for e in watchword])) // 10
dec_message = "".join([chr((ord(x) - wtd)) for x in line])
return dec_message
#ファイルの読み取り
with open(file_path, "r", encoding="utf-8") as f:
all_lines = f.readlines()
if mode == "enc":
print(f"--暗号化ログ--")
for line in all_lines:
enc_line = enc(line, watchword)
enc_list.append(enc_line)
print(enc_line)
print("---------")
elif mode == "dec":
print(f"--復号化ログ--")
for line in all_lines:
dec_line = dec(line, watchword)
dec_list.append(dec_line)
print(dec_line.rstrip())
print("---------")
#ファイルの書き出し
if mode == "enc":
out_file_path = mode + "_" + file_path
elif mode == "dec":
out_file_path = mode + "_" + file_path
with open(out_file_path, "w", encoding="utf-8") as f:
if mode == "enc":
for en in enc_list:
f.write(en + "\n")
print(f"{out_file_path}を書き出しました")
elif mode == "dec":
for de in dec_list:
f.write(de + "\n")
print(f"{out_file_path}を書き出しました")
3.実行結果
python3 enc_text.py message.txt enc Makyaberizumu
--暗号化ログ--
そゝふにべ+
ヰヴグッ<丠ざ
がぴどへ咇゜狣ねばぎゕでぐぱっ+
ご牀且ひへ皑帧へ佗゜亓ねばぎゕ晌ふ甩よゖど磄堁ざ厩囪なひ性゙ゖよっ「
痏ふ伙ちばぎゕ躵ぱっざ》びそさ邉雭ぴたねど旃ざ艹ぎひ性゙ゖよっ「
---------
enc_message.txtを書き出しました
python3 enc_text.py enc_message.txt dec Makyaberizumu
--復号化ログ--
こんにちは!
ユリウス2世が
あなたの命を狙っているそうです!
お父上との皇帝の位を争っている時に生まれた確執が原因だと思われます。
病に伏している身ですが、どこか避難なさった方が良いと思われます。
---------
dec_enc_message.txtを書き出しました
暗号化ファイル
復号化ファイル
違う合言葉で復号化してみると
python3 enc_text.py enc_message.txt dec aaaa
--復号化ログ--
ごゔぬぢば"
ョルェズ3丗き
ぃにだは呾ん狚つでぅれぞぇとず"
か爷下どは皈帞は低ん亊つでぅれ晃ぬ甠みろだ碻埸き厠囡ちど怞ゐろみず〃
痆ぬ伐じでぅれ躬とずき。なごが邀雤にざつだ斺き艰ぅど怞ゐろみず〃
---------
dec_enc_message.txtを書き出しました