查漏补缺之MD5Utils

作者: Jennyni1122 | 来源:发表于2019-02-20 09:17 被阅读12次

参考文章:https://www.cnblogs.com/CQY1183344265/p/5851456.html

MD5的全称是Message-Digest Algorithm5(信息-摘要算法),MD5算法简单来说就是把任意长度的字符串变换成固定长度(通常是128位)的十六进制字符串。在存储密码过程中,直接存储明文密码是很危险的,因此在存储密码过程中,直接存储明文密码。

在MD5Utils类中,创建一个md5()方法对密码进行加密。首先通过MessageDigest的getInstanc()方法获取数据加密对象digest,然后通过该对象的digest()方法对密码进行加密。

/**
 * MD5的全称是Message-Digest Algorithm5(信息-摘要算法),
 * MD5算法简单来说就是把任意长度的字符串变换成固定长度(通常是128位)的十六进制字符串。
 * 在存储密码过程中,直接存储明文密码是很危险的,
 * 因此在存储密码过程中,直接存储明文密码。
 * Created by Jenny on 2019/2/19.
 */

public class MD5Utils {
    /**
     * MD5加密的算法
     */
    public static String md5(String text){
        MessageDigest digest = null;
        try {
            // 创建加密对象
            digest = MessageDigest.getInstance("md5");
            // 调用加密对象的方法,加密的动作已经完成
            byte[] result = digest.digest(text.getBytes());
            // 接下来,我们要对加密后的结果,进行优化,按照mysql的优化思路走
            // mysql的优化思路:
            // 第一步,将数据全部转换成正数:
            StringBuilder sb = new StringBuilder();
            for (byte b:result){
                // 第一步,将数据全部转换成正数:
                // 解释:为什么采用b&255
                /*
                 * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)
                 * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)
                 * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000
                 * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000
                 * 0000 0000 1001 1100 此时的temp是一个int类型的整数
                 */
                int number = b & 0xff;
                // 第二步,将所有的数据转换成16进制的形式
                // 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数
                // 因此,需要对temp进行判断
                String hex = Integer.toHexString(number);
                if (hex.length() == 1){
                    sb.append("0" + hex);
                }else {
                    sb.append(hex);
                }
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        }
    }
}

相关文章

  • 查漏补缺之MD5Utils

    参考文章:https://www.cnblogs.com/CQY1183344265/p/5851456.html...

  • 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于【Android面试查漏补缺】系列文章第一篇,持续...

  • 查漏补缺

    如果想让HTML5标签兼容低版本浏览器的话,可以使用 html5shiv js来实现。注意:一定要把它引入到前面。...

  • 查漏补缺

    图文环绕和浮动 最初的CSS只是用来写文章,熟练使用float和clear两个属性来布局: float属性:指定一...

  • 查漏补缺

    1.js字符串转换成数字与数字转换成字符串的实现方法https://www.2cto.com/kf/201612/...

  • 查漏补缺

    浮动原理 1.使用之初:是为了让文字环绕图片,并且不会遮住文字。如果让图片与文字有间距,我们在浮动元素上添加。2....

  • 查漏补缺

    今天数学老师外出学习,我用了一上午的时间给孩子们查漏补缺。 首先,训练朗读:从段落与段落之间的大停顿...

  • 查漏补缺

    1 Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换2 写 u'中' 和 u'\u4e...

  • 查漏补缺

    generator(生成器) 什么是生成器:把一个列表推倒式l = [x for x in range(10)]改...

  • 查漏补缺

    session 判断

网友评论

    本文标题:查漏补缺之MD5Utils

    本文链接:https://www.haomeiwen.com/subject/iazxyqtx.html