利用openssl来计算sha1, sha224, sha256, sha384, sha512

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

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


利用openssl来计算sha1, sha224, sha256, sha384, sha512,前提是已经配置了openssl的环境:

代码如下:

[cpp]  view plain  copy
  1. #include <iostream>  
  2. #include <openssl/sha.h>   
  3. #include <openssl/crypto.h>  // OPENSSL_cleanse  
  4. #pragma comment(lib, "libeay32.lib")  
  5. #pragma comment(lib, "ssleay32.lib")  // 在本程序中, 可以注释掉这句  
  6. using namespace std;  
  7.   
  8. const char *orgStr = "hello"//待哈希的串  
  9.   
  10. // 打印前, 有必要转换  
  11. void printHash(unsigned char *md, int len)  
  12. {  
  13.     int i = 0;  
  14.     for (i = 0; i < len; i++)  
  15.     {  
  16.         printf("%02x", md[i]);  
  17.     }  
  18.   
  19.     printf("\n");  
  20. }  
  21.   
  22. void myHash1()  
  23. {  
  24.     SHA_CTX c;  
  25.     unsigned char md[SHA_DIGEST_LENGTH];  
  26.     SHA1((unsigned char *)orgStr, strlen(orgStr), md);  
  27.     printHash(md, SHA_DIGEST_LENGTH);  
  28.   
  29.     SHA1_Init(&c);  
  30.     SHA1_Update(&c, orgStr, strlen(orgStr));  
  31.     SHA1_Final(md, &c);  
  32.     OPENSSL_cleanse(&c, sizeof(c));  
  33.     printHash(md, SHA_DIGEST_LENGTH);  
  34. }  
  35.   
  36. void myHash224()  
  37. {  
  38.     SHA256_CTX c;  
  39.     unsigned char md[SHA224_DIGEST_LENGTH];  
  40.     SHA224((unsigned char *)orgStr, strlen(orgStr), md);  
  41.     printHash(md, SHA224_DIGEST_LENGTH);  
  42.   
  43.     SHA224_Init(&c);  
  44.     SHA224_Update(&c, orgStr, strlen(orgStr));  
  45.     SHA224_Final(md, &c);  
  46.     OPENSSL_cleanse(&c, sizeof(c));  
  47.     printHash(md, SHA224_DIGEST_LENGTH);  
  48. }  
  49.   
  50. void myHash256()  
  51. {  
  52.     SHA256_CTX c;  
  53.     unsigned char md[SHA256_DIGEST_LENGTH];  
  54.     SHA256((unsigned char *)orgStr, strlen(orgStr), md);  
  55.     printHash(md, SHA256_DIGEST_LENGTH);  
  56.   
  57.     SHA256_Init(&c);  
  58.     SHA256_Update(&c, orgStr, strlen(orgStr));  
  59.     SHA256_Final(md, &c);  
  60.     OPENSSL_cleanse(&c, sizeof(c));  
  61.     printHash(md, SHA256_DIGEST_LENGTH);  
  62. }  
  63.   
  64. void myHash384()  
  65. {  
  66.     SHA512_CTX c;  
  67.     unsigned char md[SHA384_DIGEST_LENGTH];  
  68.     SHA384((unsigned char *)orgStr, strlen(orgStr), md);  
  69.     printHash(md, SHA384_DIGEST_LENGTH);  
  70.   
  71.     SHA384_Init(&c);  
  72.     SHA384_Update(&c, orgStr, strlen(orgStr));  
  73.     SHA384_Final(md, &c);  
  74.     OPENSSL_cleanse(&c, sizeof(c));  
  75.     printHash(md, SHA384_DIGEST_LENGTH);  
  76. }  
  77.   
  78. void myHash512()  
  79. {  
  80.     SHA512_CTX c;  
  81.     unsigned char md[SHA512_DIGEST_LENGTH];  
  82.     SHA512((unsigned char *)orgStr, strlen(orgStr), md);  
  83.     printHash(md, SHA512_DIGEST_LENGTH);  
  84.   
  85.     SHA512_Init(&c);  
  86.     SHA512_Update(&c, orgStr, strlen(orgStr));  
  87.     SHA512_Final(md, &c);  
  88.     OPENSSL_cleanse(&c, sizeof(c));  
  89.     printHash(md, SHA512_DIGEST_LENGTH);  
  90. }  
  91.   
  92. int main()  
  93. {  
  94.     myHash1();  
  95.     myHash224();  
  96.     myHash256();  
  97.     myHash384();  
  98.     myHash512();  
  99.   
  100.     return 0;  
  101. }  
     与其他工具相比, 结果一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值