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

122 篇文章 1 订阅
53 篇文章 2 订阅

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


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

[cpp]  view plain  copy
  1. // openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码  
  2.   
  3. #include <iostream>  
  4. #include <openssl/evp.h>  
  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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值