Bootstrap

【密码学】密码学加盐操作

  1. 什么是密码学中的加盐(Salting)
    • 在密码学中,加盐是一种用于增强密码安全性的技术。当用户创建一个密码时,系统会生成一个随机的字符串(盐值),并将这个盐值与用户输入的密码组合在一起,然后通过哈希函数(如SHA - 256等)对组合后的内容进行哈希运算,得到存储在数据库中的密码哈希值。盐值的主要作用是使得即使两个用户使用相同的密码,由于盐值不同,它们在数据库中的哈希值也完全不同,增加了攻击者通过彩虹表(预先计算好的常见密码哈希值表)进行攻击的难度。
  2. 加盐操作的具体步骤及示例
    • 步骤一:生成盐值
      • 盐值通常是一个随机的字节序列。例如,在许多编程语言中,可以使用随机数生成器来创建盐值。以Python为例,使用os.urandom()函数来生成一个指定长度(假设为16字节)的盐值。
      import os
      salt = os.urandom(16)
      print(salt)
      
    • 步骤二:组合盐值和密码
      • 假设用户密码是mypassword,将盐值和密码组合在一起。可以简单地将盐值和密码字符串拼接起来。不过,在实际应用中,要确保组合方式的一致性,例如可以先将盐值转换为十六进制字符串(如果是字节序列),然后与密码拼接。
      password = "mypassword"
      salt_hex = salt.hex()
      combined = salt_hex + password
      print(combined)
      
    • 步骤三:哈希运算
      • 使用哈希函数对组合后的字符串进行哈希运算。以Python的hashlib库为例,假设使用SHA - 256哈希算法。
      import hashlib
      hash_object = hashlib.sha256(combined.encode('utf - 8'))
      hashed_password = hash_object.hexdigest()
      print(hashed_password)
      
    • 存储和验证
      • 存储盐值和哈希后的密码到数据库中。当用户登录时,系统会重新获取存储的盐值,按照相同的组合方式(盐值 + 密码)进行哈希运算,然后将得到的哈希值与存储的哈希密码进行比较,以验证用户输入的密码是否正确。
      • 例如,数据库中有两列,一列存储盐值,另一列存储哈希后的密码。当用户登录并输入密码后,系统会查询数据库获取对应的盐值,然后按照上述步骤重新计算哈希值并进行验证。假设数据库中有用户user1的盐值为salt_value_1(之前存储的盐值)和哈希密码hashed_password_1(之前存储的哈希结果)。用户登录输入密码mypassword,系统获取salt_value_1,组合后进行哈希运算得到新的哈希值new_hashed_password。如果new_hashed_password == hashed_password_1,则密码验证成功。
;