Openssl Crypto 加/解密功能封装之二:MD5 摘要生成与验证

来源:互联网 发布:电气原理图仿真软件 编辑:程序博客网 时间:2024/06/05 06:43

1、环境

OpenSSL 版本:openssl-0.9.8d

请确保系统存在环境变量 SSL_ROOT, $SSL_ROOT/lib 存在 crypto 库文件,$SSL_ROOT/lib 已加入 LD_LIBRARY_PATH 中。

测试过的系统版本:RHEL 4.8 32 bit,AIX 5.3 64bit

 

2、源码

/* * MD5.h * *  基于 Openssl crypto 库的加密/解密功能封装 * *  Created on: Mar 11, 2012 *      Author: yeyuzhen<mail.yeyuzhen@gmail.com> */#include <iostream>#include <string>#include <openssl/md5.h>// 参见 http://blog.csdn.net/lostaway/article/details/7492939#include "NumSysConvert.h"/*** @brief 生成 MD5 摘要* @author 叶雨珍<yeyzh@ffcs.cn>* @return 十六进制字符串形式摘要值*/inline std::string My_MD5(std::string msg){std::string result;if(msg.empty()){return result;}const int digestLen = 16;unsigned char digest[digestLen] = {0};memset(digest, 0x00, sizeof(digest));MD5_CTX ctx;MD5_Init(&ctx);MD5_Update(&ctx, msg.c_str(), msg.size());MD5_Final(digest, &ctx);result.clear();result.append((char *)digest, digestLen);return Bin2Hex(result);}/*** @brief MD5 校验* @author * @param digest 十六进制字符串形式摘要* @return true 校验成功* @return false 校验失败**/inline bool My_MD5_Verify(std::string _msg, std::string _digest){std::string t = My_MD5(_msg);// 强制转大写,忽略大小写差异for(std::string::iterator iter = _digest.begin();iter != _digest.end();iter++){if(isalpha(*iter)){*iter = toupper(*iter);}}if(0 == t.compare(_digest)){return true;}else{return false;}}

 

/* * main.cpp *    *   MD5 摘要测试 * */#include <iostream>#include <string>#include "MD5.h"int main(int argc, char *argv[]){std::string msg("I'am test message!!!");std::string digest = My_MD5(msg);std::cout << "Digest:" << digest << std::endl;std::string expectDigest("07B12819CB3AA62F9B45072B414B0512");if(!expectDigest.compare(My_MD5(msg))){std::cout << "MD5 Verify Success!!" << std::endl;}else{std::cout << "MD5 Verify Fail!!" << std::endl;}return 0;}


Makefile:

MD5:NumSysConvert.h MD5.h main.cppg++ -g -o MD5 -I$SSL_ROOT/include -L$SSL_ROOT/lib -lcrypto main.cpp

 

参考

OpenSSL MD5 参考  http://www.openssl.org/docs/crypto/md5.html#

 

编辑记录:

V1.0   2012-4-25 2:41:39  初稿

 

原创粉丝点击