失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MD5工具类(java实现版)

MD5工具类(java实现版)

时间:2020-01-14 17:23:39

相关推荐

MD5工具类(java实现版)

MD5工具类(java实现版)

介绍

MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法,因为其不可解密。其实现原理是基于Hash算法(简称散列函数)。

MD5算法具有以下特点

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。2、容易计算:从原数据计算出MD5值很容易(算法简单)3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。5、不可逆计算反推

java代码实现

Md5Utils

/*** * MD5加密工具(是基于hash算法实现,不可逆)* * @author xuyi3* @7月13日 @下午3:10:54* @Md5Utils* @功能说明:<br>* @春风十里不如你* @备注*/public class Md5Utils {/** 16进制的字符数组 */private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d","e", "f" };/*** * * @param source* 需要加密的原字符串* @param encoding* 指定编码类型* @param uppercase* 是否转为大写字符串* @return*/public static String MD5Encode(String source, String encoding, boolean uppercase) {String result = null;try {result = source;// 获得MD5摘要对象MessageDigest messageDigest = MessageDigest.getInstance("MD5");// 使用指定的字节数组更新摘要信息messageDigest.update(result.getBytes(encoding));// messageDigest.digest()获得16位长度result = byteArrayToHexString(messageDigest.digest());} catch (Exception e) {e.printStackTrace();}return uppercase ? result.toUpperCase() : result;}/*** 转换字节数组为16进制字符串* * @param bytes* 字节数组* @return*/private static String byteArrayToHexString(byte[] bytes) {StringBuilder stringBuilder = new StringBuilder();for (byte tem : bytes) {stringBuilder.append(byteToHexString(tem));}return stringBuilder.toString();}/*** 转换byte到16进制* * @param b* 要转换的byte* @return 16进制对应的字符*/private static String byteToHexString(byte b) {int n = b;if (n < 0) {n = 256 + n;}int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}}//备注:其实apache commones Codec包中有常用的一些加密算法实现

总结

MD5加密算法是一种比较简单和高效的不可逆加密算法,是基于散列函数实现的。在应用开发过程中有很多时候为了防止明文传输都会对传输内容进行加密,比如微信支付时传输的数据就使用MD5加密之后的字符串来做校验,当然有些支付方式(支付宝的移动支付)会采用RSA签名方式来做防数据窜改提交。

如果觉得《MD5工具类(java实现版)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。