奈北的学习日记4——sha256+salt

本文介绍了加密算法的基本类型,包括对称加密、非对称加密和Hash算法,重点讨论了SHA256加密在密码安全性中的应用。通过在密码中加入随机盐值,可以有效防止彩虹表攻击。盐值是增强密码安全性的关键,它与密码结合后进行SHA256加密,使得每次加密结果都不相同,增加了破解难度。文中还展示了如何在Java中实现盐值加密的代码示例。
摘要由CSDN通过智能技术生成

一、加密种类的简单了解

常见加密算法分类

对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES

非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1

简言之,非对称性加密就是不可逆

无法通过算法 根据加密密码反推出原密码

SHA256 加密:安全散列算法(Secure Hash Algorithm,缩写为SHA)

二、SHA256 加密

1.登录注册的密码加盐

 // 盐值
  String salt = null;
  String password = user.getPassword();
 //加密密码
  String encryptPassword = null; 
    
  salt = SaltUtil.generateSalt();
     
  encryPassword = PassWordUtil.encrypt(password,salt);

2.SaltUtil 类

  public class SaltUtil {
  
      /**
       * 生成32位随机盐
       *
       * @return
       */
      public static String generateSalt() {
          return new SecureRandomNumberGenerator().nextBytes(16).toHex();
      }
 
  }

3.PassWordUtil 类

  public class PasswordUtil {
  
      /**
       * 密码加盐,再加密
       *
       * @param pwd
       * @param salt
       * @return
       */
       public static String encrypt(String pwd, String salt) {
          if (StringUtils.isBlank(pwd)) {
               throw new IllegalArgumentException("密码不能为空");
           }
          if (StringUtils.isBlank(salt)) {
               throw new IllegalArgumentException("盐值不能为空");
           }
           return DigestUtils.sha256Hex(pwd + salt);
       }
 
   }

总结

salt:就是一串随机字符串,用于和用户密码拼接,再运行加密算法,得到不可重复的加密密码。

彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。一般主流的彩虹表都在100G以上。 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的典型实践, 比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。使用加salt的KDF函数可以使这种攻击难以实现。彩虹表是马丁·赫尔曼早期提出的简单算法的应用。

如何防止彩虹表破解密码
答案:加盐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值