51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在360安全产品的用户认证环节(如登录、设备绑定),密码存储和传输的安全至关重要。请说明常用的密码学算法(如哈希、加盐、非对称加密)在其中的应用场景,并解释为什么加盐哈希(如BCrypt)比普通哈希(如MD5)更安全,给出具体实现中的关键参数(如盐值长度、迭代次数)。

360安全开发初级工程师难度:中等

答案

1) 【一句话结论】在用户认证中,密码存储推荐使用加盐哈希(如BCrypt),通过随机盐值和多次哈希迭代抵御彩虹表与暴力破解;传输时结合对称加密(如AES)或非对称加密(如RSA),加盐哈希比普通哈希(如MD5)更安全,因前者能避免预计算攻击。

2) 【原理/概念讲解】哈希函数(如MD5、SHA-256)是单向映射,类似“把信息放进只能进不能出的箱子,锁后内容无法恢复,但箱子外观唯一”。加盐是在原始密码前/后附加随机字符串(盐),每个用户盐值唯一,即使密码相同,哈希结果也不同,防止彩虹表攻击。迭代(Iteration Count)是重复哈希的次数,次数越多,破解成本越高。非对称加密(如RSA)用公钥加密、私钥解密,适合传输敏感数据(如会话密钥),但计算开销大,不适合存储密码。

3) 【对比与适用场景】

算法类型定义特性使用场景注意点
普通哈希(如MD5、SHA-1)无盐值、无迭代单向哈希快速计算,但易被碰撞攻击,彩虹表可破解传输中加密(如HTTPS的HMAC,但MD5已不推荐)不适用于密码存储,易被彩虹表攻击
加盐哈希(如BCrypt、Argon2)哈希前附加随机盐值,多次迭代随机盐值+高迭代次数,抗预计算、彩虹表密码存储(用户注册、登录验证)需存储盐值(BCrypt自动处理),迭代次数可配置
非对称加密(如RSA、EC)公钥加密,私钥解密适合传输,但计算开销大传输敏感数据(如会话密钥、证书)不适合存储密码,因效率低,且公钥加密后需对称加密

4) 【示例】(伪代码,BCrypt自动处理盐值与迭代)
用户注册:

import bcrypt
password = input("注册密码")
salt = bcrypt.gensalt()  # 生成随机盐值(默认12次迭代)
hashed = bcrypt.hashpw(password.encode('utf-8'), salt)  # 加盐+哈希
# 存储到数据库:用户名, hashed_password(含盐值)

用户登录:

user_password = input("登录密码")
stored_hash = 数据库查询的哈希值
if bcrypt.checkpw(user_password.encode('utf-8'), stored_hash):
    print("登录成功")
else:
    print("密码错误")

5) 【面试口播版答案】
“面试官您好,关于用户认证中密码学算法的应用,核心是密码存储用加盐哈希(如BCrypt),传输用对称或非对称加密。首先,哈希函数(如MD5)是将密码转换成固定长度的字符串,但MD5易被彩虹表破解,所以存储密码时不能直接用。加盐哈希是在密码前加随机字符串(盐),每个用户盐值唯一,即使密码相同,哈希结果也不同,然后通过多次哈希(迭代)增加破解难度。比如BCrypt默认12次迭代,盐值长度16字节,这样暴力破解需要更多计算资源。传输时,比如用户登录后,服务器生成会话密钥,用AES对称加密传输,或者用RSA非对称加密传输会话密钥,因为对称加密效率高,非对称用于密钥交换。总结来说,加盐哈希通过随机盐和迭代,比普通哈希更安全,能有效抵御彩虹表和暴力破解,而传输加密保证数据在传输中不被窃听。”

6) 【追问清单】

  • 问:盐值如何生成?是否需要存储?
    回答:盐值由系统随机生成(如BCrypt的gensalt()),每个用户独立,存储时与哈希结果一起保存,因为BCrypt自动处理盐值,无需手动管理。
  • 问:迭代次数如何选择?是否越大越好?
    回答:迭代次数影响计算成本,默认12次(BCrypt),可根据服务器性能调整,但过高会增加用户登录延迟,需平衡安全与性能。
  • 问:BCrypt的盐值长度和迭代次数具体参数?
    回答:BCrypt的salt长度通常16字节(128位),迭代次数默认12,可通过参数调整(如bcrypt.gensalt(rounds=16)设置迭代次数为16)。
  • 问:传输中为什么用对称加密而非非对称加密?
    回答:对称加密(如AES)计算效率高,适合加密大量数据;非对称加密(如RSA)用于传输密钥,因为公钥加密后,私钥解密,适合密钥交换,但效率低,不适合传输普通数据。

7) 【常见坑/雷区】

    1. 盐值共享:若多个用户盐值相同,彩虹表可破解,必须每个用户盐值唯一。
    1. 迭代次数不足:迭代次数太少(如1次),破解成本低,应选择足够高的次数(如BCrypt的12-16次)。
    1. 使用MD5/SHA-1存储密码:这些算法易被碰撞攻击,彩虹表可快速破解,必须避免。
    1. 忽略传输加密:传输中未加密密码,可能导致中间人攻击,应使用HTTPS(TLS)或对称加密。
    1. 非对称加密存储密码:效率低,且公钥加密后需对称加密,实际应用中存储密码用对称加密更高效,非对称用于密钥交换。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1