Java实现MD5加密

        在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存。

       MD5,全称为“Message Digest Algorithm 5”,中文名“消息摘要算法第五版”,它是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。严格来说,它是一种摘要算法,是确保信息完整性的。不过,在某种意义上来说,也可以算作一种加密算法。

MD5 算法具有很多特点
压缩性:任意长度的数据,算出的MD5值长度都是固定的。
容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
 

但实际上MD5不是一种加密算法,只是一种算法,因为它是一个不可逆的过程,即 MD5 生成消息摘要后是不能通过结果解析得到原来的内容。

MD5在线加密工具:http://tools.jb51.net/password/CreateMD5Password

MD5加密方法之一 java自带jar工具MessageDigest实现 
java.security.MessageDigest

import java.math.BigInteger;
import java.security.MessageDigest;

public class md52 {
	
public static void main(String []args) {
	 try {
		 String str = "abc";
		 // 生成一个MD5加密计算摘要
		 MessageDigest md = MessageDigest.getInstance("MD5");
		 // 计算md5函数
		 md.update(str.getBytes("utf-8"));
		 // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
		 // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
		String a = new BigInteger(1, md.digest()).toString(16);
		System.out.println(a);
		 } catch (Exception e) {
		
		 }	
}
	
}


//输出结果​
//900150983cd24fb0d6963f7d28e17f72

​

MD5加密方法之二 spring自带的工具DigestUtils实现 
org.springframework.util.DigestUtils

    // spring自带工具包DigestUtils
    System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));

    //输出结果
    // 81dc9bdb52d04dc20036dbd8313ed055

由于MD5不可逆,所以附加一个加密解密算法


public class convertMD5 {
	public static String convertMD5(String inStr){  	
		char[] a = inStr.toCharArray();  
		for (int i = 0; i < a.length; i++){  
			a[i] = (char) (a[i] ^ 't');  
		}  
		String s = new String(a); 	
		return s;  
	}  
	/** 
     * 加密解密算法 执行一次加密,两次解密 
     */
	// 测试主函数  
	public static void main(String args[]) {  
		String s = new String("abc");  
		System.out.println("原始:" + s);  
		System.out.println("加密的:" + convertMD5(s));  
		System.out.println("解密的:" + convertMD5(convertMD5(s)));  

	}  
}

//调试结果
//原始:abc
//加密的:???
//解密的:abc

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值