MD5加密

MD5加密

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文件是否一致的。

java实现代码:

package com.gavin.md5;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;

public class MD5Test {
     
	public static final String KEY_MD5 = "MD5";
	
	public static String getMD5(String input) {
     
		System.out.println("******加密前的数据:"+input);
		
		BigInteger bigInteger = null;
		
		try {
     
			
			//1.申请使用明文MD5明文加密
			MessageDigest md = MessageDigest.getInstance(KEY_MD5);
			//2.将输入的字符串转换成byte数组
			byte[] inputBytes = input.getBytes();
			//3.将转换后的数组作为参数传入md5的update()方法中
			md.update(inputBytes);
			//4.取出转换后的数值转换成字符串并返回
			bigInteger = new BigInteger(md.digest());
			
		} 
		catch (NoSuchAlgorithmException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("申请失败,请稍后重试!");
		}
		//采用16进制
		System.out.println("******MD5明文加密后的数据:"+bigInteger.toString(16));
		System.out.println("__________________________________________________________________");
		return bigInteger.toString(16);
	}
	
	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		Scanner reader = new Scanner(System.in);
		String input1 = "加密数据666666";
		input1 = getMD5(input1);
    }
}

运行结果:

******加密前的数据:加密数据666666
******MD5明文加密后的数据:-453c2e34bbc57526647cdc5068809d13
__________________________________________________________________

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。

你可能感兴趣的:(JAVAEE,java)