Créer un hachage MD5 pour un fichierJe souhaite créer un utilitaire pour créer des hachages MD5 pour les fichiers. Le but est de disposer du hachage à utiliser ultérieurement pour vérifier l'intégrité du fichier (qu'il n'a pas été modifié). Voici le script de base que j'ai créé ? Est-ce raisonnable et approprié pour la tâche que je souhaite accomplir ?
/*
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
*/
macOSPersonnalisation de masseFenêtresRe: Créer un hachage MD5 pour un fichierJe pense que j'ai utilisé quelque chose de similaire lorsque j'ai effectué des vérifications comme celle-ci (depuis, j'ai simplement déplacé ces fichiers vers le contrôle de version et je l'utilise pour m'assurer que les fichiers corrects sont utilisés).
Pour les tables JMP, il existe également un message « interne » << Checksum()

J'ai testé l'utilisation de cette fonction sur ma classe « Aperçu du tableau de données » et elle semble bien fonctionner. Je ne sais pas à quel point elle sera robuste en raison de son « usage interne uniquement ».
Re: Créer un hachage MD5 pour un fichierMerci @jthi , ce message de tableau de données est nouveau dans la version 18, semble-t-il, et il fonctionnerait pour les tableaux de données JMP. Mon besoin est plus général, cela fonctionnerait pour tout type de fichier (.JMP, .JMPADDIN, .JMPXXXXX, .DOCX, .XLSX, .TXT, ...)
Re: Créer un hachage MD5 pour un fichierSi @Craige_Hales a félicité cela, je dois être sur la bonne voie !
Re: Créer un hachage MD5 pour un fichierOu vous pouvez utiliser 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}')
En utilisant le JSL Pick File(), j'ai sélectionné le code ci-dessus enregistré dans un fichier md5_file.py
donnant les résultats :
/Utilisateurs/_me_/Scripts/md5_file.py
MD5 /Users/_me_/Scripts/md5_file.py: d175790247060d7e415516794660216f