木头人的gravatar头像
木头人 2017-10-16 23:07:09
Apache的加密算法和java自带的加密算法

        最近研究了下加密的操作,自己本身对加密不是很熟悉,看了一下java对加密的一些操作,在这里总结一下。java从1.5之后提供了Base64Encoder和Base64Decoder。为大家用的普遍的方法先MD5加密然后base64编码,代码如下:

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

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

import sun.misc.BASE64Encoder;

public class EncryptUtil {
	/**
	 * 使用java原生(先MD5加密在base64编码)
	 * 
	 * @param str
	 * @return
	 */
	public static String MD5Encode(String str) {
		String newString = "";
		BASE64Encoder base64Encoder = new BASE64Encoder();
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			newString = base64Encoder.encode(digest.digest(str
					.getBytes("utf-8")));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return newString;
	}

	/**
	 * 使用Apache的工具类
	 * @param str
	 * @return
	 */
	public static String MD5Encode2(String str) {
		String newString = "";
		try {
			newString = Base64.encodeBase64String(DigestUtils.md5(str
					.getBytes("utf-8")));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return newString;
	}

	public static void main(String[] args) {
		System.out.println(EncryptUtil.MD5Encode("哆啦A梦"));
		System.out.println(EncryptUtil.MD5Encode2("哆啦A梦"));
	}
}

看了下源码,Apache的MD5加密底层用的是java的MessageDigest,使用起来较为方便。当然还对sha算法进行了封装:

public String encode(String str) {
		try {
			Hex.encodeHexString(DigestUtils.md5(str));
			//查看源码等价于
			DigestUtils.md5Hex(str);
			
			DigestUtils.shaHex(str);
			
			Hex.encodeHexString(DigestUtils.sha256(str));
			//查看源码等价于
			DigestUtils.sha256Hex(str.getBytes("utf-8"));
			
			DigestUtils.sha384Hex(str);
			DigestUtils.sha512Hex(str);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return str;
	}
}

打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
话不多的程序员  LV18 2021年1月14日
鱼香肉丝2  LV1 2020年4月12日
马运啊  LV1 2020年3月16日
trecechen  LV1 2018年10月10日
path  LV1 2018年8月8日
秋水丶俟伊人 2018年6月22日
暂无贡献等级
gplong82  LV1 2018年5月23日
jihaose 2018年5月11日
暂无贡献等级
lw2192213158  LV1 2018年4月1日
微微上翘  LV23 2018年2月24日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友