lug-bg: md5 digest + openssl
- Subject: lug-bg: md5 digest + openssl
- From: Aleksandar Valchev <hippo@xxxxxxxxxxxxxxxxxx>
- Date: Mon, 28 Feb 2005 14:27:27 +0200
- Organization: Efficient Software Systems
Здравейте,
Опитвам се да пресметна md5 сума на файл с помоща на openssl.
В EVP_DigestUpdate(3) е даден малък пример. Аз го използвах и допълних малко
т.е. чета съдържанието на файл(подаден като аргумент) и търся md5 сумата.
Разбира се, че нещо не стана както трябва. Когато пресметна md5 сума на файл,
с долния пример, ми излиза различна сума от пресметната с md5sum програмата.
Подобен проблем видях при Java, който май беше свързан с encoding-а. Мисля си,
че тук проблема може да идва от начина по който чета файла (би трябвало
грешката да идва от грешни входни данни). При инициализирането и използването
на функциите на openssl библиотеката не виждам да има нещо грешно.
#include <stdio.h>
#include <openssl/evp.h>
FILE *getFile(const char *filename);
int main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
unsigned char md_value[EVP_MAX_MD_SIZE];
char buffer[BUFSIZ];
int md_len, i;
FILE *f;
OpenSSL_add_all_digests();
if (!argv[1]) {
printf("Ussage: %s digestname filename\n");
exit(EXIT_FAILURE);
}
md = EVP_get_digestbyname(argv[1]);
if (!md) {
printf("Unknown message digest\n");
exit(EXIT_FAILURE);
}
f = fopen(argv[2], "r");
if (NULL == f) {
printf("Can not open %s\n", argv[2]);
exit(EXIT_FAILURE);
}
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
while (!feof(f)) {
fscanf(f, "%s", buffer);
printf("%s\n", buffer);
EVP_DigestUpdate(&mdctx, buffer, strlen(buffer));
}
fclose(f);
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);
for (i = 0; i < md_len; i++) {
printf("%x", md_value[i]);
}
printf("\n");
return EXIT_SUCCESS;
}
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
|