这是在C++工程下的MD5加密:


1, 首先导入 ,md5.h和md5.cpp,没有的话可以到下载频道下载(到处都是)。

                                                                                   

纯lua写一个md5加密 md5加密例子_md5


如果只是单纯的想使用MD5进行加密,不进行加深理解的话,可以不了解这两个文件里面的内容。


2,工作原理:

先看如下代码:

string userkey, newuserkey;
MD5 md5;	
md5.update(userkey);
new_userkey = md5.toString();



对象md5的方法update()

对象md5的另一个方法是toString(),这个方法返回经过加密的userkey的值。

假设有这样一个例子。接收到用户输入用户密码,将这个接收到的密码存放在userkey中,现在需要确认此用户输入的密码是否正确,则需要从ini(或者是数据库等,为了举例方便)读取信息匹配,假设此用户的密码在ini文件中的md5值是olduserkey,ini文件中存放的是经过md5加密过的数据。因此,要进行真确匹配的话需要先将userkey进行加密成newuserkey, 假使用户输入的密码是正确的话,newuserkey的值就与ini文件对应的值olduserkey是一样的了。

以下是我在使用md5时写的两个函数:


void lockByMD5(wchar_t* w_key_out, wchar_t* w_key_in){
	string userkey, new_userkey;
	wstring ws_key_in, ws_key_out;
	MD5 md5;

	ws_key_in = w_key_in;
	userkey = WStringToString(ws_key_in);
	md5.update(userkey);
	new_userkey = md5.toString();
	ws_key_out = StringToWString(new_userkey);
	WStringToWChar(w_key_out, ws_key_out);

}



//compare the md5 values of two wchar_t(one is "not changed yet", another has been changed) march or not
int md5cmp(wchar_t* not_changed_key, wchar_t* changed_key){

	wchar_t w_not_changed[100];
	lockByMD5(w_not_changed, not_changed_key);
	int result = wcscmp(w_not_changed, changed_key);
	return result;

}



上述的代码中一些函数(如StringToWString(), WStringToWChar() )

需要参考上一篇文章,不过功能看函数名就明白了。

第一个函数lockByMD5接收两个WChar_t(至于为什么是wchar_t类型的,是为了工程内上下文方便, 你也可以不使用wchar_t)参数,一个是输入参数每一个是输出参数。功能就是讲输入参数w_key_in转换成w_key_out,这样w_key_out里面就是w_key_in的MD5版本了。

第二个函数md5cmp 是模仿strcmp函数写的。一样有两个wchar_t类型的参数,第一个参数是没有经过md5处理的wchar_t数据(not_changed_key),第二个参数是经过md5处理过的wchar_t数据(可以理解为从ini文件或者数据库读出来的数据)(changed_key),至于返回值不用我说也明白吧,跟strcmp()或者wcscmp()一样。