MD5工具类

来源:互联网 发布:win10 ubuntu easybcd 编辑:程序博客网 时间:2024/06/03 20:45

MD5工具类(java实现版)

介绍

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

MD5算法具有以下特点

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

java代码实现

Md5Utils

/** *  * MD5加密工具(是基于hash算法实现,不可逆) *  * @author xuyi3 * @2016年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包中有常用的一些加密算法实现
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

总结

MD5加密算法是一种比较简单和高效的不可逆加密算法,是基于散列函数实现的。在应用开发过程中有很多时候为了防止明文传输都会对传输内容进行加密,比如微信支付时传输的数据就使用MD5加密之后的字符串来做校验,当然有些支付方式(支付宝的移动支付)会采用RSA签名方式来做防数据窜改提交。
  • 1
  • 2
  • 3
  • 4
—————————————————————————————————————————————————————————————————————————————
转载自:http://blog.csdn.net/nicewuranran/article/details/51901147
原创粉丝点击