MD5加密工具类

这是一个个人认为非常好用的使用MD5+salt加密的工具类,一部分代码由网上搜索而得,一部分自己修改添加之后而得。使用这个工具类,非常简单,从前台拿到密码passwd,直接HexUtil.getEncryptedPwd(passwd)就可以返回一个长度为56的字符串,可以用来保存到数据库中,相反,登录的时候,因为MD5加密是不可逆的运算,只能拿用户输入的密码走一遍MD5+salt加密之后,跟数据库中的passwd比较,看是否一致,一致时密码相同,登录成功,通过调用HexUtil.validPasswd(String passwd,String dbPasswd)方法,就可以了,不用再做其他事。


好了,贴上代码,有写一部分注释,不好的地方,希望留言指出:

/** * MD5加密解密及字符串对比工具类 */  
public class HexUtil {  private final static String HEX_NUMS_STR = "0123456789ABCDEF";  private final static Integer SALT_LENGTH = 12;  /** * 将16进制字符串转换成数组 *  * @return byte[] * @author jacob * */  public static byte[] hexStringToByte(String hex) {  /* len为什么是hex.length() / 2 ? * 首先,hex是一个字符串,里面的内容是像16进制那样的char数组 * 用2个16进制数字可以表示1个byte,所以要求得这些char[]可以转化成什么样的byte[],首先可以确定的就是长度为这个char[]的一半 */  int len = (hex.length() / 2);  byte[] result = new byte[len];  char[] hexChars = hex.toCharArray();  for (int i = 0; i < len; i++) {  int pos = i * 2;  result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4 | HEX_NUMS_STR  .indexOf(hexChars[pos + 1]));  }  return result;  }  /** * 将数组转换成16进制字符串 *  * @return String * @author jacob * * */  public static String byteToHexString(byte[] salt){  StringBuffer hexString = new StringBuffer();  for (int i = 0; i < salt.length; i++) {  String hex = Integer.toHexString(salt[i] & 0xFF);  if(hex.length() == 1){  hex = '0' + hex;  }  hexString.append(hex.toUpperCase());  }  return hexString.toString();  }  /** * 密码验证 * @param passwd 用户输入密码 * @param dbPasswd 数据库保存的密码 * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */  public static boolean validPasswd(String passwd, String dbPasswd)  throws NoSuchAlgorithmException, UnsupportedEncodingException{  byte[] pwIndb =  hexStringToByte(dbPasswd);  //定义salt  byte[] salt = new byte[SALT_LENGTH];  System.arraycopy(pwIndb, 0, salt, 0, SALT_LENGTH);  //创建消息摘要对象  MessageDigest md = MessageDigest.getInstance("MD5");  //将盐数据传入消息摘要对象  md.update(salt);  md.update(passwd.getBytes("UTF-8"));  byte[] digest = md.digest();  //声明一个对象接收数据库中的口令消息摘要  byte[] digestIndb = new byte[pwIndb.length - SALT_LENGTH];  //获得数据库中口令的摘要  System.arraycopy(pwIndb, SALT_LENGTH, digestIndb, 0,digestIndb.length);  //比较根据输入口令生成的消息摘要和数据库中的口令摘要是否相同  if(Arrays.equals(digest, digestIndb)){  //口令匹配相同  return true;  }else{  return false;  }  }  /** * 获得md5之后的16进制字符 * @param passwd 用户输入密码字符 * @return String md5加密后密码字符 * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */  public static String getEncryptedPwd(String passwd)  throws NoSuchAlgorithmException, UnsupportedEncodingException{  //拿到一个随机数组,作为盐  byte[] pwd = null;  SecureRandom sc= new SecureRandom();  byte[] salt = new byte[SALT_LENGTH];  sc.nextBytes(salt);  //声明摘要对象,并生成  MessageDigest md = MessageDigest.getInstance("MD5");  md.update(salt);  md.update(passwd.getBytes("UTF-8"));  byte[] digest = md.digest();  pwd = new byte[salt.length + digest.length];  System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);  System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);  return byteToHexString(pwd);  }  
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7系统笔记本电脑开机蓝屏怎么办

我们在使用电脑的时候难免不了会y遇到一些问题&#xff0c;比如电脑蓝屏或者黑屏的情况出现&#xff0c;就有一位win7系统用户遇到了笔记本电脑开机蓝屏的情况&#xff0c;win7系统笔记本电脑开机蓝屏怎么办?就此问题&#xff0c;让我们一起来聊聊windows7笔记本电脑开机蓝屏解…

回调函数中window.open()被拦截

在回调函数中window.open默认是会被拦截的&#xff0c;因为浏览器判断它不是用户自己打开的&#xff0c;存在安全风险&#xff0c;所以可以伪造一个用户点击事件来避开&#xff0c;代码如下&#xff1a; function newWindow(url, id) { var a document.createElement(a); a.se…

Win7电脑定时关机怎么设置

想必大家一定有遇到过这样的烦恼吧&#xff0c;电脑文件下载到一半或传输到一半的时候&#xff0c;而你有事需外出&#xff0c;关机吧太可惜了&#xff0c;不关机吧又浪费电&#xff0c;还会影响电脑的使用寿命&#xff0c;那么该如何是好呢?这时候选择电脑定时关机是最好的解…

Joda-Time几个用法小记

1, 获取每天的零点 DateTime dtnew DateTime().withMillisOfDay(0); System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));//结果 2016-09-09 00:00:00 2, 在每天的6:30处理一些东西 DateTime dtnew DateTime().withHourOfDay(6).withMinuteOfHour(30).withSe…

win7系统找不到我的电脑图标的应对办法

我们在使用win7系统电脑的过程中或多或少都会遇到一些问题&#xff0c;最近有用户表示自己在使用电脑时发现我的电脑图标不见了&#xff0c;怎么显示我的电脑图标?针对用户提出的问题&#xff0c;今天小编就和大家分享一下win7系统找不到我的电脑图标的应对办法&#xff0c;大…

浏览器中播放rtsp(不依赖vlc插件)

之前是通过vlc插件来显示rtsp流视频&#xff0c;但是限制很多&#xff1a;1.要安装vlc的插件2.插件目前只支持ie&#xff0c;像chrome在46版本之后根本就无法使用&#xff0c;于是上网搜索得出rtsp->rtmp->videoJS这样的一个方案&#xff0c;具体流程如下&#xff1a; 一…

腾讯视频中如何把视频进行收藏

在线观看视频的时候&#xff0c;把喜欢的视频收藏下来&#xff0c;可以方便以后再看。腾讯视频如何进行收藏呢? 腾讯下载视频怎么转格式_腾讯视频中如何把视频进行收藏 1、找到桌面上的快捷方式&#xff0c;双击打开程序 腾讯下载视频怎么转格式_腾讯视频中如何把视频进行收…

IP地址开启https

证书生成导入 keytool -genkey -alias ssozzjz5 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -dname "CN192.168.1.128,OUcsoa,Ocsoa,LFZ,STFZ,CCN" -ext sanip:192.168.1.128 -validity 3600 -keystore D:\ssozzjz5.keystorekeytool -export -f…

搜狗浏览器中如何删除自带工具 搜狗浏览器删除自带工具的方法步骤

搜狗浏览器中如何删除自带工具?最近有小伙伴问我想要删除搜狗浏览器中的自带工具不知道该怎么办&#xff0c;今天小编就给大家带来删除搜狗浏览器中自带工具的方法步骤&#xff0c;让我们一起来看看吧。 方法/步骤 1、我们需要先打开搜狗浏览器&#xff0c;选择右上角的工具…

ElasticSearch里面关于日期的存储方式,解决差8个小时

在ElasticSearch里面最常用的就是时间字段了&#xff0c;经常会在群里看到一些小伙伴提出有关时间的问题&#xff0c;为什么es查询的时间跟我实际看到的时间差8个小时呢。如果我们了解了ElasticSearch底层的时间存储方式就会比较容易的理解这个问题。 下面散仙先普及下时区的知…

谷歌浏览器如何收藏网站 谷歌浏览器收藏网站的方法步骤

谷歌浏览器如何收藏网站?当我们在使用谷歌浏览器想要收藏网站应该怎么办呢?今天小编就给大家带来谷歌浏览器收藏网站的具体方法步骤&#xff0c;让我们一起来看看吧。 方法/步骤 1、我们需要先在谷歌浏览器中随便打开一个网站; 2、然后我们在谷歌浏览器网址输入栏的最右边…

syslog发送日志而docker容器接收不到的问题

syslog支持"udp", "tcp", "unix_syslog", "unix_socket"协议 ,所以要判断其到底使用了什么端口类型 logstash:image: zzjz/logstash:6.2.2container_name: logstashrestart: alwaysports:- 10010:10010- 10011:10011- 10012:10012- 1…

IE浏览器网页无法缩放怎么办 解决IE浏览器网页无法缩放的方法

IE浏览器网页无法缩放怎么办?我们在使用IE浏览器浏览网页的时候&#xff0c;想要缩放网页&#xff0c;却发现无法缩放。该怎么解决这个问题?下面就是解决IE浏览器网页无法缩放的方法&#xff0c;一起来看看吧! 今天使用了一下IE浏览器&#xff0c;发现无法对缩放比例进行调整…

ElasticSearch的update_by_query使用

ElasticSearch的update_by_query语句可以很方便地为原有es表修改字段和新增字段,如下面的例子所示: 1.将资产表中area为空的字段赋值为无 POST soc-system/_update_by_query {"script": {"source": "ctx._source[area]无" },"query"…

猎豹浏览器怎么设置允许弹出窗口 允许弹窗设置方法详解

频频出现的广告弹窗&#xff0c;让不少人选择打开所用浏览器的弹窗拦截功能。不过&#xff0c;此举也带来了一点小麻烦&#xff0c;那就是容易误伤“友军”&#xff0c;一些必要的弹窗也会被强制拦截!那么&#xff0c;该怎么解决这一问题呢?下面小编就以“猎豹浏览器”为例&am…

JDK线程池CompletionService的使用

最近使用多线程优化了一个非常耗时的ping任务&#xff0c;下面的是未优化的源代码&#xff0c;大致就是遍历es取出的list&#xff0c;然后循环判断是否能ping通&#xff1a; SearchResponse searchResponse client.search(searchRequest); Iterator it searchResponse.getHi…

win7系统应用程序安装不了的解决教程

软件是计算机数据和指令的集合&#xff0c;一般有系统软件和应用软件。系统是应用软件安装的平台&#xff0c;但是由于一些设置或者故障就会出现安装不了软件的情况&#xff0c;win7系统无法安装应用程序怎么解决?就此问题&#xff0c;下面就来跟大家聊聊win7系统应用程序安装…

解决mediawiki上传文件文件名是中文上传失败

公司内部的wiki是用的mediawiki&#xff0c;其它都还好就是上传文件时文件名中有中文就不能上传&#xff0c;这次下决心要修复这个问题&#xff0c;一开始我还以为是哪里需要配置一下&#xff0c;然后搜了半天发现这是一个官方的bug&#xff1a; 好吧&#xff0c;是官方bug也好…

win7系统字体模糊发虚不清晰的解决方法

如果我们使用的电脑操作系统是win7的话&#xff0c;当我们操作的时候发现系统的字体显示变得模糊发虚不清晰的情况不知道怎么解决的话&#xff0c;小编觉得我们可以先排查一下是自己电脑显示器的原因还是系统设置的问题。一般来说都是需要在电脑设置一下即可。详细解决步骤就来…

Elasticsearch Curator使用

介绍 Elasticsearch Curator通过以下方式帮助您策划或管理您的Elasticsearch索引和快照&#xff1a; 从集群中获取索引&#xff08;或快照&#xff09;的完整列表&#xff0c;作为可操作列表迭代用户定义的过滤器列表&#xff0c;根据需要逐步从此可操作列表中删除索引&#…