一文教你如何在数据库中安全地存储密码
前言作者:神的孩子在歌唱大家好,我叫智让我们先谈谈什么不该做。不要以存储密码。任何具有数据库内部访问的人都可以看到它们。如果,攻击者可以轻松获取所有密码。那么,我们应该如何在数据库中安全地存储密码呢。
前言
作者:神的孩子在歌唱
大家好,我叫智
让我们先谈谈什么不该做。
不要以 明文形式 存储密码。任何具有数据库内部访问 权限 的人都可以看到它们。如果 数据库受损
,攻击者可以轻松获取所有密码。那么,我们应该如何在数据库中安全地存储密码呢。
现代散列(Hash)算法。
Hash函数被普遍的应用于各类不一样的安全应用和网络协议中。
哈希 是一个 单向函数 , 是不可逆 。不可能 解密散列 以获得 原始值 。如果 攻击者 获得
散列密码 ,他们就不能直接将其输入 应用程序 以获得 访问权限 。
使用现代散列函数安全存储密码。这些函数是使用 更多资源 进行计算的 “慢”函数 。这使得 暴力攻击
效果很低。不过一些常见的传统散列函数(如 MD5和SHA-1 )是 “快速” 的。它们不太安全,不应该被使用作为加密。
将密码存储为单向散列是朝着正确方向迈出的一步,但这还不够。攻击者可以通过预计算要攻击 单向散列 。一些常见的攻击是 彩虹表(rainbow
table) 和基于数据库的查找。使用这些技术,黑客可以在几秒钟内破解密码,也就是会枚举很多常见的密码,一一去查找。
彩虹表:彩虹表是一个数据库,用于通过破解密码哈希来获得身份验证。
通过在散列过程中添加每个密码唯一的 salt ,可以确保散列对于每个 密码 都是唯一的。加上盐后需要穷举 密码+salt
的所有组合,这个 计算量 就相当大了,想要 破解 已经比较难了。
计算机系统中的密码不是直接存储为纯文本,而是使用加密进行哈希处理。哈希函数是单向函数,这意味着它不能被解密。每当用户输入密码时,密码都会转换为哈希值,并与已存储的哈希值进行比较。如果值匹配,则对用户进行身份验证。
加盐密码
salt 是唯一的随机生成的字符串,作为 散列过程的一部分 添加到每个密码中。
首先将用户提供的 密码 与 随机生成的salt 相结合。然后,我们使用适当的 散列函数计算 该组合的 散列
。散列与盐一起存储在 数据库 中。同样,salt用于生成唯一散列。它不是秘密,可以作为纯文本安全存储在数据库中。
当用户登录时,我们如何根据数据库中存储的内容验证密码?首先,我们从数据库中获取用户的salt。然后,我们将salt附加到用户提供的密码并对其进行散列。我们将计算出的散列与数据库中存储的散列进行比较。如果它们相同,则密码有效。
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
学习计划安排
我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~
这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!
如果你对网络安全入门感兴趣,那么你需要的话可以
点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)