zoukankan      html  css  js  c++  java
  • Java 加密算法

    1、DES加密算法(对称算法)

    2、3DES加密算法(对称算法)

    3、单向Hash算法(散列函数):

    • MD5(Message Digest Algorithm 5)
    • SHA(Secure Hash Algorithm)
    • MAC(Message Authentication Code)
    • CRC(Cyclic Redundancy Check)

      破解方式:彩虹表-->事先生成一套密文与对应的明文存储在表中,然后用密文采取暴力攻击,碰撞出对应明文(例:admin)

    4、加盐Hash算法:

      在单向Hash算法基础上,与客户端约定好在某个位置加入一个数字、字母或字符(例:在索引10的位置加入一个m 。)

      优点:即使通过彩虹表找到了散列后的数值所对应的原始内容,但是由于经过了加盐,插入的字符串扰乱了真正的密码,使得获取真实密码的概率大大降低。

    5、PBKDF2算法

      该算法原理大致相当于在Hash算法基础上增加随机盐,并进行多次Hash运算,随机盐使得彩虹表的建表难度大幅增加,而多次Hash也使得建表和破解的难度大幅增加。

    6、Bcrypt算法

      bcrypt是专门为密码存储而设计的算法,实现中bcrypt会使用一个加盐的流程以防御彩虹表攻击,同时bcrypt还是适应性函数,它可以借由增加迭代之次数来抵御日益增进的计算机运算能力透过暴力法破解。

      Java中使用bcrypt

      

    public static void main(String[] args) throws NoSuchAlgorithmException
    
    {
        String  originalPassword = "漫话编程";
        String generatedSecuredPasswordHash = BCrypt.hashpw(originalPassword, BCrypt.gensalt(12));
        System.out.println(generatedSecuredPasswordHash);
        boolean matched = BCrypt.checkpw(originalPassword, generatedSecuredPasswordHash);
        System.out.println(matched);
    }

    7、scrypt算法

      scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用彩虹表进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。

      Java中使用scrypt

      

    public static void main(String[] args) {
    
        String originalPassword = "漫话编程";
    
        String generatedSecuredPasswordHash = SCryptUtil.scrypt(originalPassword, 16, 16, 16);
        System.out.println(generatedSecuredPasswordHash);
    
        boolean matched = SCryptUtil.check("漫话编程", generatedSecuredPasswordHash);
        System.out.println(matched);
    
        matched = SCryptUtil.check("漫画编程", generatedSecuredPasswordHash);
        System.out.println(matched);
    }

    总结于Hollis文章:https://mp.weixin.qq.com/s/vbzxYAj6jFc9Hf_fOzxH7w

  • 相关阅读:
    基于jquery的弹幕实现
    Cookie在顶级域名、二级域名和三级域名之间共享的情况
    报错:Win10 这台计算机中已经安装了 .NET Framework 4.5.2/4.6.1/4.7.1等等任何版本 或版本更高的更新
    Unity中的Text内容有空格导致换行
    逆波兰表达式
    Java基础03 byte[] 与 16进制字符串之间的转换
    nacos Linux 单机模式配置
    Oracle 常用SQL
    软件安装01 Linux下redis安装
    Java基础04 JSONObject 与范型对象转换
  • 原文地址:https://www.cnblogs.com/BestWishesZJ/p/10259822.html
Copyright © 2011-2022 走看看