MD5-Hash für eine Datei erstellenIch möchte ein Dienstprogramm zum Erstellen von MD5-Hashes für Dateien erstellen. Der Zweck besteht darin, den Hash später verwenden zu können, um die Integrität der Datei zu überprüfen (dass sie nicht geändert wurde). Hier ist das grundlegende Skript, das ich erstellt habe? Ist dies für die Aufgabe, die ich erledigen möchte, sinnvoll und angemessen?
/*
JMP JSL script to open data file as BLOB and calculate MD5 Hash
*/
Names Default To Here( 1 );
// substitute in your directory path and filename as strings below
dirpath = "";
// filename
filename = "";
//load file as text file Blob, and calculate the hexadecimal MD5 Hash
Char To Hex( Blob To Char( Blob MD5( Load Text File( dirpath || filename, blob ) ) ) );
/*
End script
*/
macOSMassenanpassungWindowsBetreff: MD5-Hash für eine Datei erstellenIch glaube, ich habe etwas Ähnliches verwendet, als ich einige derartige Prüfungen durchführte (seitdem habe ich solche Dateien einfach in die Versionskontrolle verschoben und verwende diese, um sicherzustellen, dass die richtigen Dateien verwendet werden).
Für JMP-Tabellen gibt es auch "interne" << Checksum()-Meldung

Ich habe die Verwendung in meiner Klasse „Datentabellenvorschau“ getestet und es schien gut zu funktionieren. Ich bin mir nicht sicher, wie robust es sein wird, da es nur für den internen Gebrauch bestimmt ist.
Betreff: MD5-Hash für eine Datei erstellendanke @jthi , diese Datentabellennachricht ist anscheinend neu in v18 und würde für JMP-Datentabellen funktionieren. Ich brauche etwas Allgemeineres, das für jeden Dateityp funktionieren würde (.JMP, .JMPADDIN, .JMPXXXXX, .DOCX, .XLSX, .TXT, ...)
Betreff: MD5-Hash für eine Datei erstellenWenn @Craige_Hales hierfür ein Kudo abgegeben hat, muss ich auf dem richtigen Weg sein!
Betreff: MD5-Hash für eine Datei erstellenOder Sie können Pythons Hashlib verwenden
import jmp
import sys, os, hashlib
from pathlib import Path
# Function to open a file and compute it's checksum
def file_cksum(a_filename):
digest = hashlib.md5()
try:
f = open(a_filename, 'rb') # open in binary mode
while True:
t = f.read(8192)
if len(t) == 0: break; # end of file
digest.update(t)
except:
print('file_cksum: Unexpected error: ', sys.exc_info()[0])
else:
f.close()
return digest.hexdigest()
jmp.run_jsl('''
local_path = Pick File("Chose File to checksum");
// Pick Directory on windows returns a leading / use Convert File Path()
If( Host is("Windows"),
local_path = Convert File Path( local_path, windows )
);
Python Send(local_path);
''')
print(local_path)
cksum = file_cksum(local_path)
print(f'MD5 {local_path}: {cksum}')
Mithilfe der JSL Pick File() habe ich den oben in der Datei md5_file.py gespeicherten Code ausgewählt.
Hier sind die Ergebnisse:
/Users/_me_/Scripts/md5_file.py
MD5 /Benutzer/_me_/Scripts/md5_file.py: d175790247060d7e415516794660216f