木头人
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; } }
评论