ソースコードを暗号化するPythonプログラムを書いてください。
ただし、TKinterを用いてファイルを指定して読み込むウィジェットを表示できるようにして。
import tkinter as tk
from tkinter import filedialog
import base64
def select_file():
file_path = filedialog.askopenfilename()
if file_path:
with open(file_path, "rb") as file:
script = file.read()
encrypted = base64.b64encode(script)
output_file_path = filedialog.asksaveasfilename(defaultextension=".pye")
if output_file_path:
with open(output_file_path, "wb") as output_file:
output_file.write(b"import base64
")
output_file.write(b"exec(base64.b64decode(")
output_file.write(repr(encrypted).encode("utf-8"))
output_file.write(b"))")
root = tk.Tk()
# ファイル選択ボタンを作成
button = tk.Button(root, text="ファイルを選択", command=select_file)
button.pack(pady=10)
root.mainloop()
のコードは、ファイル選択ダイアログを表示し、選択されたファイルを暗号化して新しいファイルとして保存します。暗号化には、前の例と同様にbase64
モジュールを使用します。
filedialog.asksaveasfilename()
メソッドを使用して、暗号化されたファイルを保存する場所と名前を指定するダイアログを表示します。defaultextension
引数を使用して、デフォルトで保存されるファイル拡張子を指定します。
このコードでは、暗号化されたコードを直接実行するために、exec()
関数を使用しています。ただし、安全性のために、暗号化されたコードが実行される前に、必要なチェックと検証を行うことが重要です。
ChatGPT Very Good Job!!!
h = float(input("身長は?")) / 100.0
w = float(input("体重は?"))
bmi = w / (h * h)
if bmi >= 25.0:
print("お前はデブだ!")
else:
print("お前はデブじゃなくて良かったな!")
が元のソースコード。
ばっちりウィジェットが表示され、
暗号化したいソースコードファイルを選択するとリネームするよう要求され、
別のファイル名を付けると以下の通り、見事に暗号化されていた。
import base64
exec(base64.b64decode(b'aCA9IGZsb2F0KGlucHV0KCLouqvplbfjga/vvJ8iKSkgLyAxMDAuMA0KdyA9IGZsb2F0KGlucHV0KCLkvZPph43jga/vvJ8iKSkNCmJtaSA9IHcgLyAoaCAqIGgpDQppZiBibWkgPj0gMjUuMDoNCiAgICBwcmludCgi44GK5YmN44Gv44OH44OW44Gg77yBIikNCmVsc2U6DQogICAgcHJpbnQoIuOBiuWJjeOBr+ODh+ODluOBmOOCg+OBquOBj+OBpuiJr+OBi+OBo+OBn+OBqu+8gSIpDQoNCg=='))
これはさすがに読めないだろう。
しかし、暗号化する前の元のファイルと同じようにしっかり動作した。
今度は逆に暗号化されたソースコードを復号化するプログラムを書いてもらったが、
復号化されたソースコードは以下の通り文字化けしていて失敗した。
jh®ÖÚ±î¸{m«ëúáס×h = float(input("身é·ã¯ï¼")) / 100.0
w = float(input("ä½éã¯ï¼"))
bmi = w / (h * h)
if bmi >= 25.0:
print("ãåã¯ããã ï¼")
else:
print("ãåã¯ãããããªãã¦è¯ãã£ããªï¼")
参考までに復号プログラムを書いておく。
import tkinter as tk
from tkinter import filedialog
import base64
def select_file():
file_path = filedialog.askopenfilename()
if file_path:
with open(file_path, "rb") as file:
encrypted_script = file.read()
decoded_script = base64.b64decode(encrypted_script)
output_file_path = filedialog.asksaveasfilename(defaultextension=".py")
if output_file_path:
with open(output_file_path, "wb") as output_file:
output_file.write(decoded_script)
root = tk.Tk()
# ファイル選択ボタンを作成
button = tk.Button(root, text="ファイルを選択", command=select_file)
button.pack(pady=10)
root.mainloop()