[font='Microsoft YaHei']用户注册时用户密码是在客户端是先加密还是传到服务器端加密?如果到服务器端加密,那加密的意义不大啊?如果登录做比较是直接获取输入内容加密后与数据库的内容进行比较?还是将数据库内容解密与获取的内容进行比较?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理用户密码时,最佳实践是在客户端进行哈希处理后再传到服务器端。这样做的主要原因是:
保护传输过程中的安全:即使传输过程中数据被截获,由于密码已被哈希处理(通常使用安全的哈希算法如bcrypt, scrypt, 或argon2等),攻击者直接获取到的是哈希值而非明文密码,增加了破解难度。
减少服务器负担:将加密操作放在客户端执行可以减轻服务器端的计算压力,尤其是在高并发场景下。
避免明文存储:服务器端接收到哈希后的密码后,应再次进行验证处理,通常是与存储在数据库中该用户的密码哈希值进行比较。这意味着数据库中从不存储明文密码,而是存储这些密码的哈希值,进一步增强了安全性。
具体实现步骤如下:
客户端操作:
服务器端操作:
重要提醒: - 不应该在服务器端对哈希值进行解密与原始密码进行比较,因为哈希过程是不可逆的,设计用来防止通过哈希值反推出原始信息。 - 确保使用强哈希算法并考虑加盐(salt)以增加哈希值的唯一性和破解难度。 - 实施二次验证、安全传输协议(如HTTPS)等其他安全措施,以增强整体系统安全。
综上所述,用户密码应在客户端先行哈希处理,然后服务器端通过比对哈希值来验证密码正确性,以此确保数据的安全性和隐私保护。