5 рдорд┐рдирдЯ рдореЗрдВ рдкрд╛рдпрдерди рдЬреАрдпреВрдЖрдИ

рдЫрд╡рд┐

рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдЙрд╕рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рд╣реИред рдЖрдкрдиреЗ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпрд╛ рддрдХрдиреАрдХ-рдкреНрд░реЗрдореА рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдЖрдкрдХреЗ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХ рдмрд╣реБрдд рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЛрдЧ рдЖрдкрдХреЗ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рддрдм рддрдХ рдЧреБрд░реЗрдЬ рдирд╣реАрдВ рдХрд░рддреЗ рдЬрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧреАред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдЖрдк рдПрдХ рдЬреАрдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЬреАрдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП 3 рдорд╣рд╛рди рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВ; рдЯрд┐рдВрдХрд░, wxPython рдФрд░ PyQTред рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡рд╣рд╛рдБ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдкрд╛рдпрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╕рдВрдж рд╣реЛред рд╕реБрдкрд░ рддрдХрдиреАрдХреА рдореБрджреНрджреЛрдВ рд╕реЗ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдореВрд░реНрдд рд╣реЛрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореБрдЭреЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрд╕ рдЬрд╛рд╡рд╛ рдпрд╛ .Net рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

EDISON рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ - рд╡реЗрдм-рд╡рд┐рдХрд╛рд╕
рдпрд╣ рд▓реЗрдЦ EDISON рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рдЙрдирдХреЗ рдирд╛рд╢реНрддреЗ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ , рдФрд░ рдХрд╕реНрдЯрдо рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реИ ред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЪреМрдереЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдкрд╛рд░ рдЖрдпрд╛, рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдЖрдпрд╛ред рдпрд╣ PySimpleGUI рд╣реИ, рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рднреА 3 рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреА рдЪрд░реНрдЪрд╛ рдКрдкрд░ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реБрдкрд░ рддрдХрдиреАрдХреА рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╕рд╛рд░

рдЖрдЗрдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ рдФрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВред

рджреЛ рд╕рдорд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ "рдкрд╛рдпрдерди рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ 3 рддреНрд╡рд░рд┐рдд рддрд░реАрдХреЗ" рдореЗрдВ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рдЦрдВрдб, рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдБрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЬреАрдпреВрдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо


рдЪрд┐рддреНрд░рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import PySimpleGUI as sg layout = [ [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('MD5'), sg.Checkbox('SHA1') ], [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('SHA256') ], [sg.Output(size=(88, 20))], [sg.Submit(), sg.Cancel()] ] window = sg.Window('File Compare', layout) while True: # The Event Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break 

рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рд╣рдо рддрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ


рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рд╣рдореЗрдВ рдмрд╕ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╣рдо рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 import PySimpleGUI as sg import re import hashlib def hash(fname, algo): if algo == 'MD5': hash = hashlib.md5() elif algo == 'SHA1': hash = hashlib.sha1() elif algo == 'SHA256': hash = hashlib.sha256() with open(fname) as handle: #opening the file one line at a time for memory considerations for line in handle: hash.update(line.encode(encoding = 'utf-8')) return(hash.hexdigest()) layout = [ [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('MD5'), sg.Checkbox('SHA1') ], [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('SHA256') ], [sg.Output(size=(88, 20))], [sg.Submit(), sg.Cancel()] ] window = sg.Window('File Compare', layout) while True: # The Event Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break if event == 'Submit': file1 = file2 = isitago = None # print(values[0],values[3]) if values[0] and values[3]: file1 = re.findall('.+:\/.+\.+.', values[0]) file2 = re.findall('.+:\/.+\.+.', values[3]) isitago = 1 if not file1 and file1 is not None: print('Error: File 1 path not valid.') isitago = 0 elif not file2 and file2 is not None: print('Error: File 2 path not valid.') isitago = 0 elif values[1] is not True and values[2] is not True and values[4] is not True: print('Error: Choose at least one type of Encryption Algorithm') elif isitago == 1: print('Info: Filepaths correctly defined.') algos = [] #algos to compare if values[1] == True: algos.append('MD5') if values[2] == True: algos.append('SHA1') if values[4] == True: algos.append('SHA256') filepaths = [] #files filepaths.append(values[0]) filepaths.append(values[3]) print('Info: File Comparison using:', algos) for algo in algos: print(algo, ':') print(filepaths[0], ':', hash(filepaths[0], algo)) print(filepaths[1], ':', hash(filepaths[1], algo)) if hash(filepaths[0],algo) == hash(filepaths[1],algo): print('Files match for ', algo) else: print('Files do NOT match for ', algo) else: print('Please choose 2 files.') window.close() 

рд╡рд╣ рд╣рдореЗрдВ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛:

рдЫрд╡рд┐

рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░


рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди PySimpleGUI рдЖрдкрдХреЛ рд╕рд░рд▓ рдкрд╛рдпрдерди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рддреИрдирд╛рдд рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рд╕рд░рд▓ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ PyInstaller рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреА рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ .exe рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрдЧреАред рд▓реЛрдЧ рдЗрд╕реЗ рдХреЗрд╡рд▓ рджреЛ рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд░ рдкрд╛рдПрдВрдЧреЗред


рдмреНрд▓реЙрдЧ рднреА рдкрдврд╝реЗрдВ
EDISON рдХрдВрдкрдиреА:


рдХреЗ рд▓рд┐рдП 20 рдкреБрд╕реНрддрдХрд╛рд▓рдп
рд╢рд╛рдирджрд╛рд░ iOS рдЖрд╡реЗрджрди

Source: https://habr.com/ru/post/hi480884/


All Articles