调用md5的例子

来源:互联网 发布:烽火路由器mac地址过滤 编辑:程序博客网 时间:2024/06/13 09:05

tip:

源码来自OpenSSL,已经预先编译好(编译OpenSSL是另一个问题了,有时间写一下)

工程设置:属性-...见下图

包含目录添加 OpenSSL下 include目录的路径,库目录添加OpenSSL下库所在路径(即out32dll的路径)

如图,添加 libeay32.lib;ssleay32.lib;


思路:

定义一个字符串,生成消息摘要,程序运行后要求输入字符串,再生成一个消息摘要,将两个消息摘要作比较,相等则输入正确

(因为hash函数不可逆)

源码:

// md5_app.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <openssl/md5.h>#include <stdio.h>#include <iostream>#include <iomanip>#include <stdlib.h>using namespace std;int main(){//int flag = 1;char *raw_pwd = "123456";unsigned char *raw_md_raw=(unsigned char *)malloc(10);unsigned char *raw_md;    raw_md=MD5((const unsigned char *)raw_pwd,strlen(raw_pwd),raw_md_raw);char *pwd= (char*)malloc(10);printf("plz enter password!\n");cin >> pwd;unsigned char *md;md = MD5((const unsigned char *)pwd, strlen(pwd), NULL);cout << endl;cout << " 原始密码:" << raw_pwd << endl;cout << " 原始密码的消息摘要:" << raw_md << endl;cout << "输入密码:" << pwd << endl;cout << "输入密码的消息摘要:" << md << endl;if( *raw_md == *md){cout << "correct!\n" << endl;}else {cout << "wrong!\n" << endl;}    return 0;}

重要函数:

unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);

遇到的问题(函数的参数):

第三个参数可以不指定,置NULL,程序会自动分配地址空间,但是上述程序两次调用该函数,后一次的结果会覆盖前一次(两次使用了同样的空间),所有第一次分配了新的字符串 raw_md_raw

运行结果:



1 0
原创粉丝点击