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 初稿
- Openssl Crypto 加/解密功能封装之二:MD5 摘要生成与验证
- Openssl Crypto 加/解密功能封装之一:进制转换
- openssl签名验证、信封加密解密、产生随机数、md5摘要
- openssl签名验证、信封加密解密、产生随机数、md5摘要
- openssl签名验证、信封加密解密、产生随机数、md5摘要
- java MD5 加解密 获取摘要
- RSA算法加解密---crypto++库和OpenSSL库
- linux之用openssl命令Base64编码解码、md5/sha1摘要、AES/DES3加密解密
- OpenSSL之RC4加解密
- openssl学习篇之base64编码、解码;md5 摘要;sha1摘要;3des加密,解密;rsa算法
- Crypto++ 加解密
- crypto-js加解密
- 利用OpenSSL验证加解密相关算法
- OpenSSL命令行工具验证RSA加解密
- openssl生成公钥私钥对 加解密
- openssl生成公钥私钥对 加解密
- 【加密解密】加解密技术之 MD5
- openssl中RSA加解密、对称加解密、摘要测试例子
- CCNA学习总结 命令篇
- CCNA-第三章 子网划分,VLSM和TCPIP排错
- flex与j2ee的结合(flex+Spring)
- wxWidgets:使用xrc文件分离界面与代码
- 代码片段辑录——myDestroyBody,byDestroyBody,resortBodiesOnBoat
- Openssl Crypto 加/解密功能封装之二:MD5 摘要生成与验证
- oracle系统架构
- 简单的处理swig下python的list和数组成员互转的例子。
- 黑马程序员_java初级开发前奏
- java flash tcp字节流通信(一)-flash as3 协议(1)
- java flash tcp字节流通信(一)-flash as3 协议(2)
- java flash tcp字节流通信(一)-flash as3 协议(3)
- 黑马程序员_java编程基础01
- java flash tcp字节流通信(一)-flash as3 协议(4)