簡體   English   中英

md5sum int int數組

[英]md5sum array of int in c

我想每次使用md5sum和to_md5()的輸出不同時,使用代碼C和命令md5sum file.data獲得相同的總和,如何獲得相同的總和?

我的代碼如下:

 char* to_md5(int* buffer,int buffersize){
  MD5_CTX ctx;
  int fg,n,i;
  char* out = (char*)malloc(33);
  char digest[MD5_DIGEST_LENGTH];

  for(i = 0 ; i <= buffersize ; i=i+10)
  {
    fg = MD5_Init(&ctx);
    fg =  MD5_Update(&ctx,buffer+i,i);
    fg = MD5_Final(digest,&ctx);
    if(fg != 1) {fprintf(stderr,"error in MD5_Update() ");exit(-1);}
    printf("digest = %x\n",digest);
  }
  for (n = 0; n < 16; ++n)
  {
    snprintf(&(out[n*2]), 16*2, "%02x", (unsigned int)digest[n]);
  }
  printf("  char = %s\n",out);
  return out ;
}

 int main (){
   int i,ierr,rc,iter;
   char out[256];
   int* buffer;
   int buffersize;
   int nb_iter;
   FILE * file;

   if(ierr != 0) exit(-1);
   buffersize = 5;
   nb_iter    = 1;

     buffersize *= 10;
     printf("bufsize: %ld\n",buffersize);
     buffer = (int*) calloc(buffersize,sizeof(int));


       srand(time(NULL));
       for(i = 0; i < buffersize; i ++){
         buffer[i] = rand();
       }

     file = fopen("buffer.dat","w");
     fwrite(buffer,sizeof(int),buffersize,file);
     fclose(file);

     printf(" :md5sum:%s]\n",to_md5(buffer,buffersize));
      // the command to compare my checksum of my array 
     printf("md5sum = ");system("md5sum buffer.dat");
     printf("\n");

     free(buffer);
   return 0 ;
 }

每次我得到md5sum和to_md5()的輸出不同時,如何得到相同的?

我想讓C程序輸入 (緩沖區)和md5sum一樣的東西:是整數的隨機數組; 輸出 (輸出):是md5校驗和; 這是我的代碼示例確實可以正常工作:

  #include<stdio.h>
  #include<stdlib.h>
  #include<time.h>
  #include<stdint.h>
  #include<string.h>
  #include<unistd.h>

  #include<openssl/md5.h>


  int get_md5sum(void* buffer,
                 unsigned long buffersize,
                 char* checksum){

    MD5_CTX ctx;
    int rc,i;
    unsigned char digest[MD5_DIGEST_LENGTH];

    rc = MD5_Init(&ctx);
        if(rc != 1) {
          fprintf(stderr,"error in get_md5sum : MD5_Init\n");
          return 1;
        }

        rc =  MD5_Update(&ctx,buffer,sizeof(int)*buffersize);
        if(rc != 1) {
          fprintf(stderr,"error in get_md5sum : MD5_Update\n");
          return 1;
        }

        rc = MD5_Final(digest,&ctx);
        if(rc != 1) {
          fprintf(stderr,"error in get_md5sum : MD5_Final\n");
          return 1;
        }

        for (i = 0; i < MD5_DIGEST_LENGTH; i++) {
          snprintf(&(checksum[i*2]), 16*2, "%02x", (unsigned int)digest[i]);
        }

        checksum[2*MD5_DIGEST_LENGTH+1] = '\0';

        return 0;
  }

  int main (){
    int i,ierr;
    char out[33];
    int* buffer;
    int buffersize;
    int iter,nb_iter;

    FILE* file;

    buffersize = 5;
    nb_iter    = 8;

    buffersize *= 10;
        printf("bufsize: %ld\n",buffersize);

        buffer = (int*) calloc(buffersize,sizeof(int));


        srand(time(NULL));
        for(i = 0; i < buffersize; i++){
          buffer[i] = rand();
        }

        ierr = get_md5sum(buffer,buffersize,out);
        if(ierr!=0) exit(-1);
        file= fopen("buffer.dat","w");
        fwrite((int*)buffer,sizeof(int),buffersize,file);
        fclose(file);
        printf("\nwith function get_md5sum :\n%s\n",out);
        printf("with command\t\t");
        system(" md5sum buffer.dat");



        free(buffer);


    return 0 ;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM