Java MD5加密方式

Java MD5加密方式介绍一下Java MD5加密的两种方式: 1. 第一种是用ava.security.MessageDigest类 2.第二种是用Guava的工具类,这种方法简洁实用,推荐这种方法

介绍一下Java MD5加密的两种方式。

1. 第一种是用ava.security.MessageDigest类,简单的使用方法如下:

     * MD5加密
     * @param input 待加密的字符串
     * @return 返回加密后的字符串
     */
    public static String generateMD5(String input) throws NoSuchAlgorithmException {
        //获取MD5机密实例
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] byteArr = md5.digest(input.getBytes(StandardCharsets.UTF_8));
        return byte2hex(byteArr);
    }
    public static String byte2hex(byte[] b) {
        StringBuilder hs= new StringBuilder();
        String stmp="";
        for (byte value : b) {
            //为了保证二进制机器数不变,这里需要& 0XFF
            stmp = (Integer.toHexString(value & 0XFF));
            //如果只有一位,需要在前面补上0凑足两位
            if(stmp.length() == 1) {
                hs.append("0").append(stmp);
            }else {
                hs.append(stmp);
            }
        }
        return hs.toString();
    }

将加密后的数组转换成字符串的过程有一些细节需要注意:
(1)不能直接使用new String(byte[] b),这样得到的字符串是乱码,因为该字符数组并不是由字符串 编码而来,强行解码得到的肯定是乱码。
(2)将单个byte数据转换成16进制字符串需要用到Integer.toHexString(int num)方法,不能直接传入byte数据,如果直接传入byte类型的value,会先将value向上转型为int类型,由于java在将byte类型转成int类型时会保持十进制的值不变,因此当byte为负数时,向上转型就可能改变补码,比如(byte)-10的二进制补码为1111 0110,对应的16进制字符串为f6;其转成int类型后的补码为 1111 1111 1111 1111 1111 1111 1111 0110,对应的字符串fffffff6,因此需要对byte类型的数据作运算:& 0XFF来将高24位置0,从而保证最终得到的字符串是我们想要的。
(3)

           if(stmp.length() == 1) {
                hs.append("0").append(stmp);
            }else {
                hs.append(stmp);
            }

为了保证每个byte数据都转成两位字符串,因此在只有一位时需要在前面补0。比如Integer.toHexString(10) ==>a,需要在前面补上一个0。

2.第二种是用Guava的工具类,这种方法简洁实用,推荐这种方法

    /** * 使用Guava标准包的MD5加密工具 * @param input 待加密的字符串 * @return 返回加密后的字符串 */
    public static String generateMD5(String input) throws UnsupportedEncodingException {
        //获取MD5机密实例
        return Hashing.md5().hashBytes(input.getBytes("UTF-8")).toString();
    }

今天的文章Java MD5加密方式分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14861.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注