java实现MD5加密并考虑生产环境(一)

原创 2018年04月16日 17:03:01
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 
 * @author xsm
 *
 */
public class MD5test {
	/**
	 * 申明一个16进制char数组
	 * 把数组对象作为map集合的Key保存,Value对应int数值
	 */
private static char[] HexNum={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
private static Map<Character,Integer> map=new HashMap<Character,Integer>(16);
static {
	for(int i=0;i<HexNum.length;i++){
		map.put(Character.valueOf(HexNum[i]), Integer.valueOf(i));
	}
	
}     private  static MD5test md=new MD5test();//单例模式保证每次创建对象的唯一
      private  MessageDigest message;//得到一个信息摘要器
      private final ReentrantLock lock=new ReentrantLock();//获得一个可重入锁,保证并发环境下加密的唯一性
      MD5test(){
    	 try {
			this.message=MessageDigest.getInstance("md5");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
      }
      private static MD5test getInstance(){
    	     return md;
      }
  	 public String getMD5String(String content) {
		return byteToString(hash(content));
	}

	 public String getMD5String(byte[] content) {
		return byteToString(hash(content));
	}

	 public byte[] getMD5Bytes(byte[] content) {
		return hash(content);
	}
      /**
       * 
       * @return 返回散列后的byte 对象
       */
      public byte[] hash(String str){
    	  this.lock.lock();	  
    	  try {
			byte[] bt=this.message.digest(str.getBytes("GBK"));
			if(null==bt||(bt.length!=16)){
				throw new IllegalArgumentException("传入的字符串不合法");
			}
			return bt; 
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException("unsupported utf-8 encoding", e);
		}finally{
			lock.unlock();
		}
      }
      /**
       * 
       * @param b返回散列后的byte 数组
       * @return 
       */
		public byte[] hash(byte[] bt){
			this.lock.lock();
			try{
			byte[] btt=this.message.digest(bt);
			if(null==btt||btt.length!=16){
				throw new IllegalArgumentException("辣鸡,字符串也能输错");
			}
			return btt;
			}finally{
				this.lock.unlock();
			}	
		}
		/**
		 * 
		 * @param byte转化为string对象
		 * @return
		 */
    	public String byteToString(byte[] bt){
    		int L=bt.length;
    		char[] out=new char[L<<1];
    		int i=0;
    		for(int j=0;i<L;i++){
    			out[j++]=HexNum[((0xF0&bt[i])>>>4)];//0xF0与bt[i]与运算再右移四位,相当于取16位的首位数
    			out[j++]=HexNum[0xF&bt[i]];
    		}
    		return new String(out);
    	}
      }

今天用到MD5加密发现网上的大多不怎么规范,索性请教师傅自己写了一个规范的Demo,这个Demo没有复杂的加盐操作,百分百会被http://www.cmd5.com/类似网站破解,仅供学习

Java实现MD5加盐加密算法

《 Java实现MD5加盐加密算法 》 现在一般的MD5加密在网上随随便便就能解密,解密的网站有以下一个:...
  • Hello_World_QWP
  • Hello_World_QWP
  • 2017-12-27 15:48:29
  • 355

Java传入字符串进行MD5加密

import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5...
  • l1976135784
  • l1976135784
  • 2014-04-14 19:19:24
  • 2882

两种方式实现java Md5加密

一、加盐方式/** * 生成32位md5码 * @param password * @return */ public static String md...
  • zjx2016
  • zjx2016
  • 2017-07-13 15:32:00
  • 21423

MD5加密原理和Java实现

MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数。数据库并不明文存储用户密码,而是在用户登录时将输入密码字符串进行MD5加密...
  • qq_19776363
  • qq_19776363
  • 2015-10-14 19:50:25
  • 1552

MD5加密的简单java实现

MD5加密
  • liu1782291245
  • liu1782291245
  • 2017-06-19 14:24:11
  • 27906

工具类总结(3)-MD5 加盐加密工具类

项目注册登录时使用,加盐操作不易被破解
  • menglinjie
  • menglinjie
  • 2017-11-28 09:51:53
  • 551

Java/Android中的MD5加密加盐方法

MD5加密不加盐方法: MD5是一个安全的散列算法(Hash Functions),是哈希算法中的一种,输入两个不同的明文不会得到相同的输出值。根据密文不能得到明文,其过程不可逆,也就是...
  • lsf1025995457
  • lsf1025995457
  • 2016-06-22 21:45:26
  • 3065

Java实现MD5加密与解密

Java代码: import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; ...
  • u010267906
  • u010267906
  • 2016-06-29 14:28:06
  • 5891

JAVA 实现MD5加密算法

JAVA实现MD5加密算法
  • github_38151745
  • github_38151745
  • 2017-08-09 17:17:51
  • 248

Java实现MD5加密以及解密

MD5的介绍         从本质上来说,MD5并不是一种加密算法,其全称是Message Digest Algorithm MD5(中文名:信息摘要算法第五版),为计算机安全领域广泛使用的一种散列...
  • miaomiao47
  • miaomiao47
  • 2013-07-22 23:00:43
  • 8232
收藏助手
不良信息举报
您举报文章:java实现MD5加密并考虑生产环境(一)
举报原因:
原因补充:

(最多只允许输入30个字)