如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?

转载:http://blog.csdn.net/stpeace/article/details/41922115


openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码:

[cpp]  view plain  copy
  1. // openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码  
  2.   
  3. #include   
  4. #include   
  5. #pragma comment(lib, "libeay32.lib")  
  6. #pragma comment(lib, "ssleay32.lib") // 可以注释掉  
  7. using namespace std;  
  8.   
  9.   
  10. int main()  
  11. {  
  12.     char digestType[][20] =   
  13.     {  
  14.         "xxx"// 非法  
  15.         "md4",  
  16.         "md5",  
  17.         "sha1",  
  18.         "sha256",  
  19.         "sha384",  
  20.         "sha512",  
  21.     };  
  22.   
  23.     int size = sizeof(digestType) / sizeof(digestType[0]);  
  24.     int i = 0;  
  25.     for(i = 0; i < size; i++)  
  26.     {     
  27.         EVP_MD_CTX mdctx;  
  28.         const EVP_MD *md = NULL;  
  29.         char str[] = "testOpenssl";  
  30.         unsigned char mdValue[EVP_MAX_MD_SIZE] = {0};  
  31.         unsigned int mdLen = 0;  
  32.   
  33.         OpenSSL_add_all_digests();  
  34.         md = EVP_get_digestbyname(digestType[i]);  
  35.         if(!md) // 不支持的格式  
  36.         {  
  37.             printf("Unknown message digest %s\n", digestType[i]);  
  38.             continue;  
  39.         }  
  40.   
  41.         EVP_MD_CTX_init(&mdctx);  
  42.         EVP_DigestInit_ex(&mdctx, md, NULL);  
  43.         EVP_DigestUpdate(&mdctx, str, strlen(str));  
  44.         EVP_DigestFinal_ex(&mdctx, mdValue, &mdLen);  
  45.         EVP_MD_CTX_cleanup(&mdctx);  
  46.   
  47.         printf("%s is ",  digestType[i]);  
  48.         int j = 0;  
  49.         for(j = 0; j < mdLen; j++)  
  50.         {  
  51.             printf("%02X", mdValue[j]);  
  52.         }  
  53.   
  54.         printf("\n");  
  55.     }  
  56.   
  57.     return 0;  
  58. }  
      结果为:

Unknown message digest xxx
md4 is 3F1DED43A61E531EB49771D7519741A6
md5 is BD9A9CAE3D300EC608C217658E20F934
sha1 is 842CC44DB178A7A73BDB2BCDB7386BCABD56A5CB
sha256 is DB22DB9C451E72D85ED9348A736A69A66451593598C2CABACC949C6E33D844DF
sha384 is 707F730102F9C512C53348BE2C0A80D5B5CB8C67CC7A4A4602E99710CD37466BC3ED4F076BA9B77428D1C2EC35A7F261
sha512 is DAE45250C34FCF0860D02F692B9FC79FEA7E6D82C342EB7C402C71959D1B8CABCFFBC61142FFA21344130E809F0AE87AA002C24DB3F1542BA8331A6E82743C7F

你可能感兴趣的:(网络安全,C++,C,网络)