Обновление K-LITE Codecs Pack
Я очень люблю эту сборку кодеков, которая позволяет в неправославном виндовсе воспроизводить практически любые аудио/видео файлы. Сборка Full и толще позволяет подменить убогий проигрыватель Windows Media player. Но будьте бдительны! При обновлении K-LITE Codecs Pack некоторые зеркала пытаются впарить вместо честного файла, у которого сходятся все суммы свои крифософты, которые якобы загрузят файл. Впрочем подобные выкрутасы происходят не только с кодеками.
По ходу уже давно пора писать скрипт для автоматической проверки загруженного файла на сходимость md5/sha256. Хотя, его наверняка уже написали.
P.S. Написал скрипт для сверки md5/sha256. Работает в python3 (можно python2, тогда в первой строке надо заменить или удалить цифирку), требует tkinter и hashlib. Проверен в Windows и cygwin (вероятна работа в сборках, порождённых от RedHat). Скрипт ориентирован на ленивых пользователей (ибо tkinter - это переносимый GUI по умолчанию для python3). К сожалению макспарк неправильно поддерживает HTML тэги. Так что пришлось проявить насилие:
#!/usr/bin/python3
import tkinter as tk
from tkinter import filedialog as tkFileDialog
import hashlib
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.pack()
self.createWidgets()
# create and place controls
def createWidgets(self):
root.title("Checksum match")
self.sum_frame = tk.Frame(self)
self.sum_frame.pack(fill = 'both')
# MD5 label
self.md5lbl = tk.Label(self.sum_frame, text="MD5:")
self.md5lbl.grid(row = 1, column = 1, sticky=tk.NE)
# MD5 edit box for given sum
self.md5txt = tk.Text(self.sum_frame, width=33, height=1)
self.md5txt.grid(row = 1, column = 2, sticky=tk.NW)
# MD5 computed sum
self.md5sum = tk.Label(self.sum_frame, text="?")
self.md5sum["font"] = self.md5txt["font"]
self.md5sum.grid(row = 2, column = 2, sticky=tk.NW)
# SHA256 label
self.shalbl = tk.Label(self.sum_frame, text="SHA256:")
self.shalbl.grid(row = 3, column = 1, sticky=tk.NE)
# SHA256 edit box for given sum
self.shatxt = tk.Text(self.sum_frame, width=65, height=1)
self.shatxt.grid(row = 3, column = 2)
# SHA256 computed sum
self.shasum = tk.Label(self.sum_frame, text="?")
self.shasum["font"] = self.shatxt["font"]
self.shasum.grid(row = 4, column = 2, sticky=tk.NW)
# file name label
self.fillbl = tk.Label(self.sum_frame, text="File:")
self.fillbl.grid(row = 5, column = 1, sticky=tk.NE)
# file name edit box
self.filtxt = tk.Text(self.sum_frame, width=55, height=1)
self.filtxt.grid(row = 5, column = 2, sticky=tk.NW)
# file name browse button
self.sel_file = tk.Button(self.sum_frame)
self.sel_file["text"] = "..."
self.sel_file["command"] = self.open_file
self.sel_file.grid(row = 5, column = 2, sticky=tk.NE)
# checksum compute button
self.test_file = tk.Button(self.sum_frame)
self.test_file["text"] = "Check sum"
self.test_file["command"] = self.check_sum
self.test_file.grid(row = 6, column = 2, sticky=tk.NW)
# main exit button
self.QUIT = tk.Button(self.sum_frame, text="QUIT", fg="red", command=root.destroy)
self.QUIT.grid(row = 6, column = 2)
# get text value from tkinter.Text control
def get_text(self, text_field):
return text_field.get('1.0', 'end').rstrip()
# set text value to tkinter.Text control
def set_text(self, text_field, str):
text_field.delete('1.0', 'end')
text_field.insert('1.0', str)
# compare given and computed checksums (md5, sha256) for file
def set_caption(self, lbl, txt, cap):
x = self.get_text(txt)
if x != cap and len(x)>0:
self.md5sum["fg"] = "red"
else:
self.md5sum["fg"] = "black"
lbl["text"] = cap
# compare given and computed checksums (md5, sha256) for file
def check_sum(self):
f = open(self.filtxt.get('1.0', 'end').rstrip(), "rb")
try:
chunksize = 4096
m = hashlib.md5()
s = hashlib.sha256()
chunk = f.read(chunksize)
while chunk:
m.update(chunk)
s.update(chunk)
chunk = f.read(chunksize)
d = m.hexdigest()
self.set_caption(self.md5sum, self.md5txt, d)
d = s.hexdigest()
self.set_caption(self.shasum, self.shatxt, d)
finally:
f.close()
# select file name with file dialog
def open_file(self):
fn = self.get_text(self.filtxt)
ofd = tkFileDialog.Open(root, initialfile=fn, title="Open file 2 check", filetypes = [('*.* all files', '.*')])
fn = ofd.show()
if fn == '':
return
self.set_text(self.filtxt, fn)
def check_file_sum(file_name, sum_array):
f = open(self.filtxt.get('1.0', 'end').rstrip(), "rb")
try:
chunksize = 4096
m = hashlib.md5()
s = hashlib.sha256()
chunk = f.read(chunksize)
while chunk:
m.update(chunk)
s.update(chunk)
chunk = f.read(chunksize)
sum_array = [d.hexdigest(), s.hexdigest()]
finally:
f.close()
# main (startup) section
root = tk.Tk()
app = Application(master=root)
app.mainloop()
Комментарии