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

6570阅读 0评论2016-05-17 xiaqian369
分类:LINUX

请按照之前博文的介绍配置openssl环境。代码如下:


[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include   
  2. #include    
  3. #include   // 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. }  
     与其他工具相比, 结果一致。
上一篇:Linux怎样访问Windows共享文件和文件夹
下一篇:java中,方法中定义的类为什么不能访问方法中的局部变量解析.