这是在C++工程下的MD5加密:
1, 首先导入 ,md5.h和md5.cpp,没有的话可以到下载频道下载(到处都是)。
如果只是单纯的想使用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()一样。