簡易SHA256 Sum チェックツール
Linux MintのCinnamonエディションにはnemoというファイル管理ツールがある。このツールはなかなかの多機能であり、設定も自分の好みに合わせたものを提供できるようになっている。コンテキストメニューひとつとってもその項目をオン・オフできるようになっているし、なかなか細かい設定ができるツールだ。
そのコンテキストメニューの中に「Check SHA256」がある。これは、ディストリビューションの.isoイメージをダウンロードし、ファイルアイコン上で右クリックすると表示される項目である。
いわば正常にisoイメージがダウンロードされたか整合性をとるためのもので、ディストリビューションのダウンロードサイトには大抵は掲載されている。本来は整合性と信頼性をチェックする必要がある。通常は整合性でもいいが、厳密にチェックするのであれば、署名キーが必要で、ダウンロードサイトにその手順が掲載されている。その手順に従えば、整合性と信頼性をチェックすることができ、安心してインストールすることができるわけである。まあ、そこまでやらずダウンロードして、ブータブルUSBを作成してインストールしていることがほとんどだろう。企業でLinuxを使用するなら、やはりきちんと整合性と信頼性をチェックしていたほうがいい。
さて、SHA256 Sumは64文字の英数字から構成されており、ダウンロードしたisoイメージのSHA256 Sumとサイトで提示されているSHA256 Sumと比較して一致していれば整合性はとれていることになる。今回作成したツールはCheck SHA256で求められたものと比較するだけの機能しかない。
ソースコード
Python3.8.10でコードを書いた。エラーチェックはそれぞれの長さをチェックするだけである。基本的にCTRL+Vで貼り付けることを想定しているだけなので、日本語文字列など入力すると、当然プログラムはブレークする。右クリックによる貼付けもPyperclipというライブラリをインストールすればPythonではできるようだが、多分Windowsに対して動作するものだろう。Linux Mintではうまく動かなかった。調べてみると、いくつかインストールする必要があるようだが、面倒くさいので見送る。ちゃんとしたければLazarusで作る。Pythonはいわばプロトタイプとして考える。
sha256_check.py
from tkinter.constants import SOLID
from tkinter import messagebox as msgbox
import tkinter as tk
# 長さチェック
def length_check(source, target):
source_length = len(source)
target_length = len(target)
length_error = True if source_length != target_length else False
return length_error
# エディットボックスの中をクリア
def editbox_clear():
source_editbox.delete(0, tk.END)
target_editbox.delete(0, tk.END)
source_editbox.focus_set()
# 一文字ずつ文字コード(ASCII)に変換してチェック
def sha256_sum_check():
source = source_editbox.get()
target = target_editbox.get()
if length_check(source, target):
msgbox.showerror('Length error', 'Lengths do not match')
else:
error_flag = False
for i in range(len(source)):
source_char_code = ord(source[i])
target_char_code = ord(target[i])
if source_char_code != target_char_code:
error_flag = True
if error_flag:
msgbox.showerror('Match error', 'SHA256 Sum did not match')
else:
msgbox.showinfo('Infomation', 'SHA256 Sum matched')
# main
root = tk.Tk()
root.resizable(False, False)
root.geometry('610x150')
root.title('SHA256 Sum Check')
label = tk.Label(root, text='Source:')
label.place(x=15, y=22)
source_editbox = tk.Entry(root, relief=SOLID)
source_editbox.place(x=70, y=20, width=520, height=24)
label = tk.Label(root, text='Target:')
label.place(x=15, y=62)
target_editbox = tk.Entry(root, relief=SOLID)
target_editbox.place(x=70, y=60, width=520, height=24)
button = tk.Button(root, text='Start', width=7, relief=SOLID, cursor='hand1', command=sha256_sum_check)
button.place(x=320, y=110)
button = tk.Button(root, text='Clear', width=7, relief=SOLID, cursor='hand1', command=editbox_clear)
button.place(x=420, y=110)
button = tk.Button(root, text='Close', width=6, relief=SOLID, cursor='hand1', command=root.destroy)
button.place(x=520, y=110)
source_editbox.focus_set()
root.mainloop()
実行
python3 sha256_check.py
以下のウィンドウが表示されるので、Sourceにサイトで指定されているSHA256 SumをCTRL+Vで貼り付ける。Targetには、「Check SHA256」で求められたSHA256 Sumを同じくCTRL+Vで貼り付ける。あとは[Start]ボタンをクリックするだけである。