轉載:http://blog.csdn.net/stpeace/article/details/42371079
利用openssl來計算sha1, sha224, sha256, sha384, sha512,前提是已經配置了openssl的環境:
代碼如下:
[cpp]?view plaincopy
#include?<iostream>?? #include?<openssl/sha.h>??? #include?<openssl/crypto.h>??//?OPENSSL_cleanse?? #pragma?comment(lib,?"libeay32.lib")?? #pragma?comment(lib,?"ssleay32.lib")??//?在本程序中,?可以注釋掉這句?? using?namespace?std;?? ?? const?char?*orgStr?=?"hello";??? ?? ?? void?printHash(unsigned?char?*md,?int?len)?? {?? ????int?i?=?0;?? ????for?(i?=?0;?i?<?len;?i++)?? ????{?? ????????printf("%02x",?md[i]);?? ????}?? ?? ????printf("\n");?? }?? ?? void?myHash1()?? {?? ????SHA_CTX?c;?? ????unsigned?char?md[SHA_DIGEST_LENGTH];?? ????SHA1((unsigned?char?*)orgStr,?strlen(orgStr),?md);?? ????printHash(md,?SHA_DIGEST_LENGTH);?? ?? ????SHA1_Init(&c);?? ????SHA1_Update(&c,?orgStr,?strlen(orgStr));?? ????SHA1_Final(md,?&c);?? ????OPENSSL_cleanse(&c,?sizeof(c));?? ????printHash(md,?SHA_DIGEST_LENGTH);?? }?? ?? void?myHash224()?? {?? ????SHA256_CTX?c;?? ????unsigned?char?md[SHA224_DIGEST_LENGTH];?? ????SHA224((unsigned?char?*)orgStr,?strlen(orgStr),?md);?? ????printHash(md,?SHA224_DIGEST_LENGTH);?? ?? ????SHA224_Init(&c);?? ????SHA224_Update(&c,?orgStr,?strlen(orgStr));?? ????SHA224_Final(md,?&c);?? ????OPENSSL_cleanse(&c,?sizeof(c));?? ????printHash(md,?SHA224_DIGEST_LENGTH);?? }?? ?? void?myHash256()?? {?? ????SHA256_CTX?c;?? ????unsigned?char?md[SHA256_DIGEST_LENGTH];?? ????SHA256((unsigned?char?*)orgStr,?strlen(orgStr),?md);?? ????printHash(md,?SHA256_DIGEST_LENGTH);?? ?? ????SHA256_Init(&c);?? ????SHA256_Update(&c,?orgStr,?strlen(orgStr));?? ????SHA256_Final(md,?&c);?? ????OPENSSL_cleanse(&c,?sizeof(c));?? ????printHash(md,?SHA256_DIGEST_LENGTH);?? }?? ?? void?myHash384()?? {?? ????SHA512_CTX?c;?? ????unsigned?char?md[SHA384_DIGEST_LENGTH];?? ????SHA384((unsigned?char?*)orgStr,?strlen(orgStr),?md);?? ????printHash(md,?SHA384_DIGEST_LENGTH);?? ?? ????SHA384_Init(&c);?? ????SHA384_Update(&c,?orgStr,?strlen(orgStr));?? ????SHA384_Final(md,?&c);?? ????OPENSSL_cleanse(&c,?sizeof(c));?? ????printHash(md,?SHA384_DIGEST_LENGTH);?? }?? ?? void?myHash512()?? {?? ????SHA512_CTX?c;?? ????unsigned?char?md[SHA512_DIGEST_LENGTH];?? ????SHA512((unsigned?char?*)orgStr,?strlen(orgStr),?md);?? ????printHash(md,?SHA512_DIGEST_LENGTH);?? ?? ????SHA512_Init(&c);?? ????SHA512_Update(&c,?orgStr,?strlen(orgStr));?? ????SHA512_Final(md,?&c);?? ????OPENSSL_cleanse(&c,?sizeof(c));?? ????printHash(md,?SHA512_DIGEST_LENGTH);?? }?? ?? int?main()?? {?? ????myHash1();?? ????myHash224();?? ????myHash256();?? ????myHash384();?? ????myHash512();?? ?? ????return?0;?? }??
? ? ?與其他工具相比, 結果一致。
總結
以上是生活随笔為你收集整理的利用openssl来计算sha1, sha224, sha256, sha384, sha512的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。