MD5&MD5盐值加密

MD5. Message Digest algorithm 5,信息摘要算法
压缩性:任意长度的数据,算出的MD5值长度都是固定的容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的
不可逆

加盐:
通过生成随机数与MD5生成字符串进行组合·数据库同时存储MD5值与salt值.验证正确性时使用salt进行MD5即可

MD5

   public static void main(String[] args) {
        String s=DigestUtils.md5Hex("123456");
        System.out.println(s);
    }

单纯的将用户密码使用MD5存入数据库风险还是有的,因为世面上MD5暴力碰撞的工具很多,很容易暴力破解

MD5+加盐

手动加盐

	public static void main(String[] args) {
        String s=Md5Crypt.apr1Crypt("123456".getBytes());//加默认盐值8位字符
        System.out.println(s);
        String ss=Md5Crypt.apr1Crypt("123456".getBytes(),"tao");//加随机盐
        System.out.println(ss);
        //$apr1$tao$uvVoCPk5qvFmoitagFQAz.
        //$apr1$tao$uvVoCPk5qvFmoitagFQAz.
    }

BCryptPasswordEncoder

	public static void main(String[] args) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String encode = passwordEncoder.encode("123456");
        System.out.println(encode);
        System.out.println(passwordEncoder.matches("123456",encode));
    }

这里加密字段都一样的时候得到的加密值是不一样的,因为BCryptPasswordEncoder 使用encode编码是会自动生成随机盐,那我们要确定加密过的数据是否正确,那么就需要BCryptPasswordEncoder 的matches来解码,因为BCryptPasswordEncoder 使用encode生成的加密数据中是包含随机盐的,那么matches解码的时候根据加密数据中的的规则取出随机盐即可判断是否正确!

手动加盐比较繁琐,数据库中还需要存入随机盐,建议采用Spring提供的BCryptPasswordEncoder来进行加盐加密

你可能感兴趣的:(JAVA,加密)