なにそれ、わかんない

自分用の備忘録

セキュリティの話

サイトの見栄えを新しくて、不要だと思った記事を削除しました。
わたしのサイトをみるより、いろいろなサイトを回ってるほうが知識を得られると思ったからです。
作ったものついて細かい技術を解説してみたほうが面白そうだと思いました。
自分の能力を向上させられますし……。

作ったもの

ほかの人に自分のパソコンをいじられるのがいやだったので、簡単に操作できないようなプログラムを組みました。
知見がある人に対しては全くもっていいほど簡単なものですが、無知な人にとってはどうしようもないであろうプログラムだと思います。
Windowsの場合、パソコンを起動したらログイン画面がでてきますよね。それが二重にあるだけです。
簡単な説明で申し訳ないですが、そんな感じです。

環境

Pythonに関して、機械学習などAIのイメージがとても強かったのですが、簡単にプログラムが組めることに魅力を感じました。
Tkinterというウィジェットツールを使いました。
現在では、kivyや、WXpythonなどのツールがあるらしいですが、標準で乗っているのがTkinterなので、こちらを使いました。

Visual Studioやanacondaは使いませんでした。エラーの発見は自分でしました。

ソースコード

import tkinter
from tkinter import messagebox
import datetime

def exit():
    # name と passwordを直に書いています。実際は暗号化して別ファイルに置いておきたいものですが…….。
    if entryName.get() == 'name':
        if entryPass.get() == 'pass':
            # ログインしたときに表示されるようにします。 messageboxはtkinterのなかの小さいウィンドウを表示するツールになります。ウィジェットを組み合わせれば自分でも作れなくはないですが、簡単なのほうがよかったのでインポートしています。
            messagebox.showinfo("", "welcome!") #(title, description)が入ります。
            quit()


    messagebox.showerror("Error", "The name or password is invalid") # show info とはエラー音がなったり、エラー表示っぽくなります。
    with open("log.txt", mode='a') as file:
    # aモードはあとから書き込むときのモードです。w(rite) や r(ead)もあります。
        file.write(entryName.get() + " : " + entryPass.get() + "\n") # パスワードや名前が違ったときにファイルに書き込みをしています。
    entryPass.delete(0, tkinter.END)
    # OK を押したときにパスワードの中身を消去しています。 引数は、0文字目から、入力された文字の最後まで消すことを表しています。

# メインウィンドウの設定をしています。column configure や row configure について少し難しかったのでコードの下にまとめています。
root = tkinter.Tk()
root.geometry("400x300")
root.title("password")
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=1)
root.grid_rowconfigure(2, weight=1)
# フルスクリーンになるように設定しています。
root.attributes("-fullscreen", True)

Frame = tkinter.Frame(width=400, height=300)

LabelName = tkinter.Label(Frame, text="Name")
LabelPass = tkinter.Label(Frame, text="Password")
entryName = tkinter.Entry(Frame)
entryPass = tkinter.Entry(Frame)
# def で関数の宣言をウィンドウの先にしておかないとコマンドで認識してくれません。
btn = tkinter.Button(Frame, text="send", command=exit)

Frame.grid(column=0, row=0, columnspan=2, rowspan=3)
LabelName.grid(column=0, row=0)
LabelPass.grid(column=0, row=1)
entryName.grid(column=1, row=0)
entryPass.grid(column=1, row=1)
btn.grid(column=0, columnspan=2, row=2, pady=15) # pady = padding y です。縦方向に空間を作ります。 ipadyなど内側にpaddingを張ることもできます。


with open("log.txt", mode='a') as file :
    file.write(str(datetime.datetime.now()) + "\n")
# 起動した時間を書き込んでいます。datetime.datetime.now()でパソコンの時刻を取得しています。datetime型なので、ファイルに書き込むときはstring型に直さないと買い込むことができません。

root.mainloop()
row \ column 0 1
0 0,0 0,1
1 1,0 1,1

上の表のようにマスとして考えるとgridはわかりやすいです。
0からはじまるのに注意です。
個人的にpackを使うよりも見栄えが良いと思ったので、gridを多用しています。

column や row に spanをつけることで、spanで指定したマス数をまたがって表示されます。