J'ai le chemin du fichier. Comment puis-je obtenir le hash MD5 de celui-ci ?
Merci
J'ai le chemin du fichier. Comment puis-je obtenir le hash MD5 de celui-ci ?
Merci
Voici une mise en œuvre directe de la fonction md5sum
commande qui calcule et affiche le MD5 du fichier spécifié sur la ligne de commande. Elle doit être liée à la bibliothèque OpenSSL ( gcc md5.c -o md5 -lssl
) pour fonctionner. C'est du pur C, mais vous devriez pouvoir l'adapter à votre application C++ assez facilement.
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
unsigned char result[MD5_DIGEST_LENGTH];
// Print the MD5 sum as hex-digits.
void print_md5_sum(unsigned char* md) {
int i;
for(i=0; i <MD5_DIGEST_LENGTH; i++) {
printf("%02x",md[i]);
}
}
// Get the size of the file by its file descriptor
unsigned long get_size_by_fd(int fd) {
struct stat statbuf;
if(fstat(fd, &statbuf) < 0) exit(-1);
return statbuf.st_size;
}
int main(int argc, char *argv[]) {
int file_descript;
unsigned long file_size;
char* file_buffer;
if(argc != 2) {
printf("Must specify the file\n");
exit(-1);
}
printf("using file:\t%s\n", argv[1]);
file_descript = open(argv[1], O_RDONLY);
if(file_descript < 0) exit(-1);
file_size = get_size_by_fd(file_descript);
printf("file size:\t%lu\n", file_size);
file_buffer = mmap(0, file_size, PROT_READ, MAP_SHARED, file_descript, 0);
MD5((unsigned char*) file_buffer, file_size, result);
print_md5_sum(result);
printf(" %s\n", argv[1]);
return 0;
}
Vous pouvez implémenter l'algorithme MD5 vous-même (les exemples sont partout sur le web), ou vous pouvez créer un lien avec les librairies OpenSSL et utiliser les fonctions digest d'OpenSSL. Voici un exemple pour obtenir le MD5 d'un tableau d'octets :
#include <openssl/md5.h>
QByteArray AESWrapper::md5 ( const QByteArray& data) {
unsigned char * tmp_hash;
tmp_hash = MD5((const unsigned char*)data.constData(), data.length(), NULL);
return QByteArray((const char*)tmp_hash, MD5_DIGEST_LENGTH);
}
J'utilise ce fichier http://people.csail.mit.edu/rivest/Md5.c
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.