MD5算法加密~16位、32位、64位

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。

MD5算法加密~16位、32位、64位。

1991年,由Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。MD5是非常安全的。

消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。 消息摘要采用单向Hash 函数将需加密的明文"摘要"成一串128bit的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。这样这串摘要便可成为验证明文是否是"真身"的"指纹"了。

因为MD5是基于消息摘要原理的,消息摘要的基本特征就是很难根据摘要推算出消息报文。

java实现代码:

package com.ts.u;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import sun.misc.BASE64Encoder;

/**
 * MD5 encrypt algorithm. <br>
 * Encryption irreversible.
 * @author Tony_tian
 * @version 0.0.1 <br> 2015-10-15 12:57:12
 * */
public final class MD5 {
	
	/**Determine encrypt algorithm MD5*/
	private static final String ALGORITHM_MD5 = "MD5";
	/**UTF-8 Encoding*/
	private static final String UTF_8 = "UTF-8";
	
	/**
	 * MD5 16bit Encrypt Methods.
	 * @param readyEncryptStr ready encrypt string
	 * @return String encrypt result string
	 * @throws NoSuchAlgorithmException 
	 * */
	public static final String MD5_16bit(String readyEncryptStr) throws NoSuchAlgorithmException{
		if(readyEncryptStr != null){
			return MD5.MD5_32bit(readyEncryptStr).substring(8, 24);
		}else{
			return null;
		}
	}
	
	/**
	 * MD5 32bit Encrypt Methods.
	 * @param readyEncryptStr ready encrypt string
	 * @return String encrypt result string
	 * @throws NoSuchAlgorithmException 
	 * */
	public static final String MD5_32bit(String readyEncryptStr) throws NoSuchAlgorithmException{
		if(readyEncryptStr != null){
			//Get MD5 digest algorithm's MessageDigest's instance.
			MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
			//Use specified byte update digest.
			md.update(readyEncryptStr.getBytes());
			//Get cipher text
			byte [] b = md.digest();
			//The cipher text converted to hexadecimal string
			StringBuilder su = new StringBuilder();
			//byte array switch hexadecimal number.
			for(int offset = 0,bLen = b.length; offset < bLen; offset++){
				String haxHex = Integer.toHexString(b[offset] & 0xFF);
				if(haxHex.length() < 2){
					su.append("0");
				}
				su.append(haxHex);
			}
			return su.toString();
		}else{
			return null;
		}
	}
	
	/**
	 * MD5 32bit Encrypt Methods.
	 * @param readyEncryptStr ready encrypt string
	 * @return String encrypt result string
	 * @throws NoSuchAlgorithmException 
	 * */
	public static final String MD5_32bit1(String readyEncryptStr) throws NoSuchAlgorithmException{
		if(readyEncryptStr != null){
			//The cipher text converted to hexadecimal string
			StringBuilder su = new StringBuilder();
			//Get MD5 digest algorithm's MessageDigest's instance.
			MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
			byte [] b = md.digest(readyEncryptStr.getBytes());
			int temp = 0;
			//byte array switch hexadecimal number.
			for(int offset = 0,bLen = b.length; offset < bLen; offset++){
				temp = b[offset];
				if(temp < 0){
					temp += 256;
				}
		        int d1 = temp / 16;
		        int d2 = temp % 16;
		        su.append(Integer.toHexString(d1) + Integer.toHexString(d2)) ;
			}
			return su.toString();
		}else{
			return null;
		}
	}
	
	/**
	 * MD5 32bit Encrypt Methods.
	 * @param readyEncryptStr ready encrypt string
	 * @return String encrypt result string
	 * @throws NoSuchAlgorithmException 
	 * */
	public static final String MD5_32bit2(String readyEncryptStr) throws NoSuchAlgorithmException{
		if(readyEncryptStr != null){
			//The cipher text converted to hexadecimal string
			StringBuilder su = new StringBuilder();
			//Get MD5 digest algorithm's MessageDigest's instance.
			MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
			//Use specified byte update digest.
			md.update(readyEncryptStr.getBytes());
			byte [] b = md.digest();
			int temp = 0;
			//byte array switch hexadecimal number.
			for(int offset = 0,bLen = b.length; offset < bLen; offset++){
				temp = b[offset];
				if(temp < 0){
					temp += 256;
				}
				if(temp < 16){
					su.append("0");
				}
				su.append(Integer.toHexString(temp));
			}
			return su.toString();
		}else{
			return null;
		}
	}
	
	/**
	 * MD5 16bit Encrypt Methods.
	 * @param readyEncryptStr ready encrypt string
	 * @return String encrypt result string
	 * @throws NoSuchAlgorithmException 
	 * @throws UnsupportedEncodingException 
	 * */
	public static final String MD5_64bit(String readyEncryptStr) throws NoSuchAlgorithmException, UnsupportedEncodingException{
		MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
		BASE64Encoder base64Encoder = new BASE64Encoder();
		return base64Encoder.encode(md.digest(readyEncryptStr.getBytes(UTF_8)));
	}
	
	public static void main(String[] args) {
		try {
			String md516 = MD5.MD5_16bit("kaka123");
			System.out.println("16bit-md5:\n" + md516); //
			String md532 = MD5.MD5_32bit("kaka123");
			String md5321 = MD5.MD5_32bit1("kaka123");
			String md5322 = MD5.MD5_32bit2("kaka123");
			System.out.println("32bit-md5:"); //5d052f1e32af4e4ac2544a5fc2a9b992
			System.out.println("1:  " + md532);
			System.out.println("2:  " + md5321);
			System.out.println("3:  " + md5322);
			String md564 = MD5.MD5_64bit("kaka123");
			System.out.println("64bit-md5:\n" + md564); //
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行结果:

16bit-md5:
32af4e4ac2544a5f
32bit-md5:
1:  5d052f1e32af4e4ac2544a5fc2a9b992
2:  5d052f1e32af4e4ac2544a5fc2a9b992
3:  5d052f1e32af4e4ac2544a5fc2a9b992
64bit-md5:
XQUvHjKvTkrCVEpfwqm5kg==

 

 

你可能感兴趣的:(MD5算法加密~16位、32位、64位)