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

  • 相关阅读:
    Oracle中的substr()函数和INSTR()函数和mysql中substring_index函数字符截取函数用法:计算BOM系数用量拼接字符串*计算值方法
    (转载)SDRAM驱动笔记
    【转】Verilog阻塞与非阻塞赋值使用要点
    【转转】(筆記) always block內省略else所代表的電路 (SOC) (Verilog)
    (原創) 如何處理signed integer的加法運算與overflow? (SOC) (Verilog)
    [转载]亚稳态
    Dev Exprss 发布部署
    Dev splliter 去除中间的分割显示
    DevTreeList中的新增、修改的设计
    Oracle 常用网址
  • 原文地址:https://www.cnblogs.com/BestWishesZJ/p/10259822.html
Copyright © 2011-2022 走看看