2011-11-23 4 views
1

J'essaie de créer un hachage md5 que je compare avec un hachage PHP md5.c MD5 de openssl lib ne correspond pas php md5 comment se fait-il?

Les deux ne pas être toutes coutures le même

ci-dessous est mon code c ainsi que le php compairison

Pourquoi les deux md5 pas la même chose?

Marque commande

gcc -Wall -lssl -o test test.c 

code test.c

#include <stdio.h> 
#include <openssl/md5.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <openssl/md5.h> 
#include <time.h> 

unsigned char result[MD5_DIGEST_LENGTH]; 

// Print the MD5 sum as hex-digits. 
void print_md5_sum(unsigned char* md, char* md5) { 

    int i; 

    for(i=0; i < MD5_DIGEST_LENGTH; i++) { 

      char temp[3]; 
      snprintf(temp,sizeof(temp),"%02x",md[i]); 

      if(i == 0){ 
        strncpy(md5,temp,3); 
      }else{ 
        strncat(md5,temp,MD5_DIGEST_LENGTH); 
      } 
    } 

     printf("md5 is %s \n", md5); 
} 

int main(int argc, char** argv){ 

    char* file_buffer = "testtest"; 
    char buffer[MD5_DIGEST_LENGTH +1]; 

    MD5((unsigned char*) file_buffer, sizeof(file_buffer), result); 

    printf("length %i\n", MD5_DIGEST_LENGTH); 

     print_md5_sum(result,buffer); 
     printf("%s \n" ,buffer); 

     return 0; 
} 

code php

<?php 
    echo md5("testtest"); 
?> 

résultats

php md5

05a671c66aefea124cc08b76ea6d30bb 

code c md5

098f6bcd4621d373cade4e832627b4f6 
+1

Il y a quelque chose de mal avec votre code C. '05a671c66aefea124cc08b76ea6d30bb' est en effet le digramme hexadécimal correct pour' 'testtest'' – NullUserException

+1

FYI: md5 ('test') = 098f6bcd4621d373cade4e832627b4f6 – hakre

Répondre

7

ne vous donne pas la bonne longueur pour calculer la somme des MD5 plus. Il ne vous donne que la taille du pointeur file_buffer, qui sera probablement soit 4 soit 8 selon votre plateforme.

Dans ce cas, vous êtes probablement mieux appelez la fonction MD5() comme ceci:

MD5((unsigned char*) file_buffer, strlen(file_buffer), result); 
+0

merci qui a fonctionné. – MrNemus

+1

@MrNemus: de rien. N'oubliez pas d'accepter la réponse si elle répond à votre question. [Voici comment.] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – tinman