Java 实现 MD5 和base64 的加密 解密 和 MD5文件完整性校验

介绍:

MD5:一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致,是一种不可逆的摘要算法,用于生成摘要,无法逆破解到原文。

Base64:是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息,是可逆的,经过Encode后,可以将Decode转化为原文。在开发中,有的公司上传图片采用的是将图片转换成Base64字符串,再上传。在做加密相关的功能时,通常会将数据进行Base64加密/解密。

下面是用Java实现简单的MD5 和base64 的加密 解密 验证,原理是:先撒盐,使 原密码+盐 生成一个新的字符串,然后对这个新的字符串进行MD5加密,或者base64加密,当然这只是简单的一种实现,实际开发中可以采用多次撒盐和多次MD5,或者base64加密的方式来进行编码。

1.工具类如下:

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;

/**
 * @Auther : 
 * @Date : 2019/5/21 14:26
 * @Description : 加密解密通用类
 */
public class EncryptUtils {

	/**
	 * 获取一个文件的md5值(可处理大文件)
	 * @return md5值
	 */
	public static String getFileMd5(File file) {
		FileInputStream fileInputStream = null;
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			fileInputStream = new FileInputStream(file);
			byte[] buffer = new byte[8192];
			int length;
			while ((length = fileInputStream.read(buffer)) != -1) {
				digest.update(buffer, 0, length);
			}
			return new String(Hex.encodeHex(digest.digest()));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} finally {
			try {
				if (fileInputStream != null){
					fileInputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 求一个字符串的md5值
	 * @param text 字符串
	 * @return md5 value
	 */
	public static String md5(String text, String key) throws Exception {
		// 加密后的字符串
		String encodeStr= DigestUtils.md5Hex(text + key);
		System.out.println("MD5---加密---后的字符串 encodeStr="+encodeStr);
		return encodeStr;
	}

	/**
	 * base64 加密
	 * @param text
	 * @param key
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String base64(String text, String key) throws UnsupportedEncodingException {
		byte[] textByte = text.getBytes("UTF-8");
		final BASE64Encoder encoder = new BASE64Encoder();
		final String encodeStr = encoder.encode(textByte);
		System.out.println("BASE64---加密---后的字符串 encodeStr="+encodeStr);
		return encodeStr;
	}

	/**
	 * base64 解密
	 * @param encodeStr
	 * @return
	 * @throws IOException
	 */
	public static String decoderBASE64(String encodeStr) throws IOException {
		final BASE64Decoder decoder = new BASE64Decoder();
		byte[] textByte = decoder.decodeBuffer(encodeStr);
		String decoderStr = new String(textByte, "UTF-8");
		System.out.println("BASE64---解密---后的字符串 decoderStr="+decoderStr);
		return decoderStr;
	}

	/**
	 * MD5验证方法
	 *
	 * @param text 明文
	 * @param key 密钥
	 * @param md5 密文
	 * @return true/false
	 * @throws Exception
	 */
	public static boolean verify(String text, String key, String md5) throws Exception {
		System.out.println("MD5验证开始==>\n新字符串为:"+text+",key为:"+key);
		// 根据传入的密钥进行验证
		String md5Text = md5(text, key);
		System.out.println("原加密后的结果为:"+md5);
		if(md5Text.equalsIgnoreCase(md5))
		{
			System.out.println("======MD5验证通过=====");
			return true;
		}
		System.out.println("=====MD5验证不通过=====");
		return false;
	}

	public static void main(String[] args) {
		String mypassword = null;
		try {
			// MD5加密
			mypassword = EncryptUtils.md5("123456", "sort");
			// MD5验证
			EncryptUtils.verify("123456", "sort",mypassword);
			// base64加密
			String encodeStr = EncryptUtils.base64("123456", "sort");
			// base64解密
			EncryptUtils.decoderBASE64(encodeStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

2.运行结果:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值