md5_hash.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:1k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 2000 Double Precision, Inc.
  3. ** See COPYING for distribution information.
  4. */
  5. #include "md5.h"
  6. static const char base64tab[]=
  7. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  8. const char *md5_hash(const char *passw)
  9. {
  10. MD5_DIGEST md5buf;
  11. static char hash_buffer[sizeof("{MD5}")+ (sizeof(md5buf)+2)/3*4];
  12. int a=0,b=0,c=0;
  13. int i, j;
  14. int d, e, f, g;
  15. md5_digest(passw, strlen(passw), md5buf);
  16. strcpy(hash_buffer, "{MD5}");
  17. j=5;
  18. for (i=0; i<sizeof(md5buf); i += 3)
  19. {
  20. a=md5buf[i];
  21. b= i+1 < sizeof(md5buf) ? md5buf[i+1]:0;
  22. c= i+2 < sizeof(md5buf) ? md5buf[i+2]:0;
  23. d=base64tab[ a >> 2 ];
  24. e=base64tab[ ((a & 3 ) << 4) | (b >> 4)];
  25. f=base64tab[ ((b & 15) << 2) | (c >> 6)];
  26. g=base64tab[ c & 63 ];
  27. if (i + 1 >= sizeof(md5buf)) f='=';
  28. if (i + 2 >= sizeof(md5buf)) g='=';
  29. hash_buffer[j++]=d;
  30. hash_buffer[j++]=e;
  31. hash_buffer[j++]=f;
  32. hash_buffer[j++]=g;
  33. }
  34. hash_buffer[j]=0;
  35. return (hash_buffer);
  36. }