Crear un hash MD5 para un archivoQuiero crear una utilidad para crear hashes MD5 para archivos. El objetivo es tener el hash para utilizarlo más tarde para verificar la integridad del archivo (que no haya sido alterado). ¿A continuación se muestra el script básico que se me ocurrió? ¿Es razonable y apropiado para la tarea que quiero realizar?
/*
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
*/
macOSPersonalización masivaVentanasRe: Crear hash MD5 para un archivoCreo que utilicé algo similar cuando tuve algunas comprobaciones de ese tipo (desde entonces simplemente moví esos archivos al control de versiones y lo uso para asegurarme de que se estén usando los archivos correctos).
Para las tablas JMP también existe el mensaje "interno" << Checksum()

He probado a usar esto en mi clase "Vista previa de la tabla de datos" y pareció funcionar bien. No estoy seguro de cuán robusto será debido al "uso interno únicamente".
Re: Crear hash MD5 para un archivoGracias @jthi , ese mensaje de tabla de datos es nuevo en la versión 18, según parece, y funcionaría para tablas de datos JMP. Mi necesidad es más general, que funcione para cualquier tipo de archivo (.JMP, .JMPADDIN, .JMPXXXXX, .DOCX, .XLSX, .TXT, ...)
Re: Crear hash MD5 para un archivoSi @Craige_Hales le dio me gusta a esto, ¡debo estar en el camino correcto!
Re: Crear hash MD5 para un archivoO puedes usar la biblioteca hashlib de Python
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}')
Usando JSL Pick File(), seleccioné el código anterior guardado en un archivo md5_file.py
dando los resultados:
/Usuarios/_me_/Scripts/md5_file.py
MD5 /Usuarios/_yo_/Scripts/archivo_md5.py: d175790247060d7e415516794660216f