Skip to content

Latest commit

 

History

History
87 lines (60 loc) · 3.3 KB

关于数据库存储.md

File metadata and controls

87 lines (60 loc) · 3.3 KB

存储盐值及其应用

项目背景

这个项目是安全系统的核心部分(SHG-U System)。该项目主要关注哈希计算和加密安全,不涉及数据库和用户界面等的代码。这些组件需要由 SHG-U System 用户自行开发,以适应具体的应用场景和需求。

为什么需要盐值?

盐值(Salt)用于增强哈希算法的安全性。通过添加唯一的盐值,可以防止彩虹表攻击和重复哈希攻击,使相同的输入数据在不同的盐值下生成不同的哈希结果。

盐值的存储

在使用盐值时,需要同时存储盐值和计算得到的哈希值,以便在需要验证数据时能够重新计算哈希值。

1. 存储盐值和哈希值

  • 存储盐值: 盐值与哈希值一起存储在数据库中。这样可以确保验证时能够使用相同的盐值。
  • 存储方式: 盐值和哈希值可以存储在同一个字段中,或者分开存储。

示例存储格式

  • 分隔符格式: 使用分隔符将盐值和哈希值连接在一起。
    salt:hashed_value
    
  • 分开存储: 将盐值和哈希值存储在不同的数据库字段中。
    Field1: salt
    Field2: hashed_value
    

2. 验证哈希值

在验证输入数据时,需要从存储中检索盐值,并使用相同的盐值和输入数据重新计算哈希值,最后与存储的哈希值进行比较。

验证步骤

  1. 检索盐值和哈希值: 从数据库中获取存储的盐值和哈希值。
  2. 重新计算哈希值: 使用检索到的盐值和输入数据重新计算哈希值。
  3. 比较哈希值: 将计算得到的哈希值与存储的哈希值进行比较,以验证数据的有效性。

示例代码

def store_hash_and_salt(data):
    salt = generate_salt()
    hash_value = strong_hash(data, salt)
    # 存储盐值和哈希值到数据库中
    return salt, hash_value

def verify_hash(stored_salt, stored_hash, input_data):
    new_hash = strong_hash(input_data, stored_salt)
    return new_hash == stored_hash

3. 应用场景

用户注册和存储

  • 注册用户: 在用户注册时生成一个新的盐值,并将其与计算得到的哈希值一起存储。
def store_user_password(username, password):
    salt, hashed_password = store_hash_and_salt(password)
    # 存储用户名、盐值和哈希值到数据库中
    save_to_database(username, salt, hashed_password)

用户登录和验证

  • 验证用户: 在用户登录时检索存储的盐值和哈希值,并用其重新计算哈希值,验证结果是否匹配。
def verify_user_password(username, password):
    # 从数据库中检索盐值和哈希值
    salt, stored_hash = get_from_database(username)
    return verify_hash(salt, stored_hash, password)

总结

  • 盐值: 用于增加哈希值的唯一性和安全性。
  • 存储: 需要将盐值与哈希值一起存储,以便在验证时能够使用。
  • 验证: 通过检索盐值并重新计算哈希值来验证数据。
  • 项目背景: 此部分代码是安全系统的核心(SHG-U System),不涉及数据库和用户界面等的代码,需自行开发。

通过正确地存储和使用盐值,可以有效提高哈希的安全性,防止常见的攻击方式。