欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现MD5加密

程序员文章站 2024-03-20 13:30:22
...
   //调用
   String password = new String("qweqwe");
   password=stringMD5(password);
   
	/**
	 * md5加密
	 * @param input
	 * @return
	 */
	public static String stringMD5(String input) {
		  try {
		     // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
		     MessageDigest messageDigest =MessageDigest.getInstance("MD5");
		     
		     // 输入的字符串转换成字节数组
		     byte[] inputByteArray = input.getBytes();
		     
		     // inputByteArray是输入字符串转换得到的字节数组
		     messageDigest.update(inputByteArray);
		     
		     // 转换并返回结果,也是字节数组,包含16个元素
		     byte[] resultByteArray = messageDigest.digest();
		     
		     // 字符数组转换成字符串返回
		     return byteArrayToHex(resultByteArray);
		     
		  } catch (NoSuchAlgorithmException e) {
		     return null;
		  }
		}
		
	 /**
	  * 字节数组转成16进制表示格式的字符串		   
	  * @param byteArray需要转换的字节数组
	  * @return 16进制表示格式的字符串
	  **/
	//将字节数组换成成16进制的字符串
	public static String byteArrayToHex(byte[] byteArray) {
	    // 首先初始化一个字符数组,用来存放每个16进制字符
		char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f' };
		
	    // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))
		char[] resultCharArray =new char[byteArray.length * 2];
		
	    // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去
		int index = 0;
		for (byte b : byteArray) {
			resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];
			resultCharArray[index++] = hexDigits[b& 0xf];
	}