MD5简介以及java代码实现

MD5简介:
 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。
 MD5算法的特点:
压缩性:任意长度的数据,算出MD5值长度都是固定的;
容易计算:从原数据计算出MD5值很容易;
抗修改性:对原数据进行任何改动,哪怕只修改一个字节,所得到的MD5值都有很大的区别;
强抗碰撞:想得到两个具有相同MD5值得数据是非常困难的;
不可逆性:MD5加密是不可逆的,一个字符串对应唯一的MD5值,但一个MD5值对应多个字符串;

MD5的应用:
一致性校验:对一段信息产生信息摘要,以防止被篡改。用于下载文件完整性的校验。
数字签名:对一段Message产生fingerprint(指纹),以防止被篡改。
安全访问认证:操作系统的登陆验证以及各类网站、系统的登陆验证。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。


MD5的java实现:
package zjm.md5.test;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5_Verify {
	
	//得到32位的加密结果
	public static String encrypt(String str){
		MessageDigest md;
		try {
			md = MessageDigest.getInstance("MD5");
			byte[] str_byte = str.getBytes(); 
			byte[] md5_result_byte = md.digest(str_byte);
//			System.out.println(md5_result_byte);
//			System.out.println("字节数组的长度是:"+md5_result_byte.length);
			String md5_result = bytesToHex(md5_result_byte);
			return md5_result;
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			return null;
		}
	}
	//将字节数组转化为16进制字符串
	public static String bytesToHex(byte[] bytes) {
		StringBuffer md5str = new StringBuffer();
		//把数组每一字节换成16进制连成md5字符串
		int digital;
		for (int i = 0; i < bytes.length; i++) {
			 System.out.println(",   "+bytes[i]);
			 digital = bytes[i];
			if(digital < 0) {  //16及以上的数转16进制是两位
				digital += 256;
			}
			if(digital < 16){
				md5str.append("0");//如果是0~16之间的数的话则变成0X
			}
			md5str.append(Integer.toHexString(digital));
		}
		return md5str.toString().toUpperCase();
	}
	
	public static void main(String[] args) {
		String str = "123";
		if(encrypt(str)!=null){
			String result = encrypt(str);
			System.out.println("加密结果为"+result);
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值