md5crypt 密码验证问题???????? 我的mai服务器用的是extmail,密码加密方式是md5crypt方式,我现在要自己写个登陆和修改密码的页面,但是数据库里面存储的是 $1$iL5qCwKt$VXwkRD6w1IfErBCFp2LD61 这种格式的密码,我怎么才能验证密码和修改这种格式的密码?求高人解答... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你点代码,你看看://得到数据库的密码(我这个是ibatis,你根据你自己的得到数据库中的密码)String password = (String) sqlDao.getRecord("enterprise.getEnterprisePassword", eid);//获得页面输入的旧密码String oldpassword = request.getParameter("oldpassword");//EncryptUtil封装类str2md5加密方法if(EncryptUtil.str2md5(oldpassword).equals(password)){.......... MD5 属于 MessageDigest, 是hash function,是不可逆的。Sun的MessageDigest提供了下列Algorithm:MD2 MD5 SHA-1 SHA-256 SHA-384 SHA-512 一般写登陆程序,楼主只需要把form中拿到的password用同样的Algorithm进行hash运算,得到一个HASH字符串, 然后比较你hash后的字符串和数据库中的字符串是否一样,如果一样, 则表示拥护密码正确,反之,密码不正确, 例如 你的password 用 MD5 Algorithm算法 hash后得到$1$iL5qCwKt$VXwkRD6w1IfErBCFp2LD61, 正好和数据库中检测到的一样, 哪么说明用户密码正确。下列是JAVA中简单HASH的实现: public static String hash( String cleartext ) { try { // Can be MD5 (128bit), SHA-1(160bit), SHA-256, SHA-384,SHA-512 MessageDigest algoHash = MessageDigest.getInstance( "SHA-256" ); algoHash.update( cleartext.getBytes( "UTF-8" ) ); byte[] digest = algoHash.digest(); String b64Digest = new String( Base64.encode( digest ), "UTF-8" ); return b64Digest; } catch ( GeneralSecurityException e ) { log.info( "sha2Hash: ", e ); return null; } catch ( UnsupportedEncodingException e) { log.info( "sha2Hash: ", e ); return null; } }这里使用了SHA-256作为算法进行hash运算, 楼主可以根据自己的算法替换 SHA-256, 就可以了希望我的回答对楼主有用。 大家切记: MD5 只是一种消息摘要技术,不是一种安全的加密算法。 对于登录系统,尽量少用直接MD5后的值来作为密码密文。 $1$iL5qCwKt$VXwkRD6w1IfErBCFp2LD61 这种格式的密码是extmail本身加密后存进数据库的..$1$hhhhhh$xxxxxxxxxxx该格式以md5()结果为基础,用一串hhhhhh(随机数)的hash对md5进行加密得到的密码,xxxxxxxxxxxxx 就是md5密文数据,它的特征是以$1$为前缀,符合此说明的格式就是md5crypt。这是extmail官方的说明,但是同样是123456,每次保持进数据库的结果都不一样...请问..这样的话我该如何验证和修改密码? 使用MyEclipse之后使用Eclipse开发时的问题 JS动态添加TR怎么让新增的靠前 freemarker+spring中list取文章前几条数据 web 浏览器的工作 Myeclipse 不识别不自动提示<tx:advice>标签 关于 java applet的初级问题 简单的登陆界面不能登陆 xml解析出问题!! 这段话在做什么?有关doEndTag、handleRequest。 求救各位高手,jsp 万分火急!!!!!! Struts2 下载的问题 有人对NekoHtml比较了解吗?
//得到数据库的密码(我这个是ibatis,你根据你自己的得到数据库中的密码)
String password = (String) sqlDao.getRecord("enterprise.getEnterprisePassword", eid);
//获得页面输入的旧密码
String oldpassword = request.getParameter("oldpassword");
//EncryptUtil封装类str2md5加密方法
if(EncryptUtil.str2md5(oldpassword).equals(password)){
..........
Sun的MessageDigest提供了下列Algorithm:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512 一般写登陆程序,楼主只需要把form中拿到的password用同样的Algorithm进行hash运算,得到一个HASH字符串, 然后比较你hash后的字符串和数据库中的字符串是否一样,如果一样, 则表示拥护密码正确,反之,密码不正确, 例如 你的password 用 MD5 Algorithm算法 hash后得到$1$iL5qCwKt$VXwkRD6w1IfErBCFp2LD61, 正好和数据库中检测到的一样, 哪么说明用户密码正确。下列是JAVA中简单HASH的实现:
public static String hash( String cleartext ) {
try {
// Can be MD5 (128bit), SHA-1(160bit), SHA-256, SHA-384,SHA-512
MessageDigest algoHash = MessageDigest.getInstance( "SHA-256" );
algoHash.update( cleartext.getBytes( "UTF-8" ) );
byte[] digest = algoHash.digest();
String b64Digest = new String( Base64.encode( digest ), "UTF-8" );
return b64Digest;
}
catch ( GeneralSecurityException e ) {
log.info( "sha2Hash: ", e );
return null;
}
catch ( UnsupportedEncodingException e) {
log.info( "sha2Hash: ", e );
return null;
}
}
这里使用了SHA-256作为算法进行hash运算, 楼主可以根据自己的算法替换 SHA-256, 就可以了希望我的回答对楼主有用。