• Java MD5加密


    MD5加密很常用,比如数据库中密码等敏感字段需要加密存储,核对密码时先以同样的方式对用户输入的密码进行加密,再与数据库中存储的密码比较。

    MD5加密有很多种实现方式,此处介绍2种。

    1、使用JDK自带MessageDigest

    public class MD5Util {
        
        public static String getMD5Str(String str) {
            byte[] digest = null;
            try {
                MessageDigest md5 = MessageDigest.getInstance("md5");
                digest  = md5.digest(str.getBytes("utf-8"));
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //16是表示转换为16进制数
            String md5Str = new BigInteger(1, digest).toString(16);
            return md5Str;
        }
    
    }

    2、使用Spring自带的DigestUtils

    上面是自己封装,太麻烦,Spring已经给我们封装好了。

    String md5Str = DigestUtils.md5DigestAsHex("原串".getBytes());

    说明

    只使用md5加密是不行的,很容易被破解。常见的做法有:

    • 先对原串进行一些处理,比如先给它拼接一个字符串常量,再进行md5加密。即使对方解密,也获取不到原串。
    • 使用多种加密算法。比如先用md5加密,再对加密的结果使用其它加密算法进行加密。比如先使用md5加密,对加密的结果再次使用md5加密。

    这2种方式方式经常一起使用。

    第一种确实有问题,我测试了几百万个数据,不符合的数据加密后长度集中在29、30、31,

    这几百万个数据中没有出现大于32的,数据库字段长度设置为32字符,能存储得下,依然可以使用,只不过数据长度不一定是32位。

    第二种加密后是32位的,无论是性能、可靠性、编码量都比其它方式优异,推荐

  • 相关阅读:
    Linux下Apache服务器并发优化
    centos 7 mount win共享文件夹 开机自动挂载
    自学 phpredis 的心路历程
    VM虚拟机下centos7 无法上网的问题解决办法
    php headers_sent 函数的作用
    is_file 与 file_exists 的区别
    php 面向对象 中的self
    php 去除所有空格 包括中文空格圆角空格
    滑动窗口滚动条触发事件
    PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较 转自#冰雪傲骨#
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12693162.html
Copyright © 2020-2023  润新知