加盐 Salt那么 , 由于简单的对密码进行Hash算法不够安全 , 那么我们就可以对密码加Salt , 比如密码是\"I love you\" 虽然彩虹表里有这条数据 , 但是如果加上\"安红我爱你\" , 这样MD5结果就大不一样.
jacks-MacBook-Air:~ jack$ irb2.2.3 :001 > require 'digest/md5.so'=> true2.2.3 :002 > puts Digest::MD5.hexdigest('I love you')
e4f58a805a6e1fd0f6bef58c86f9ceb3
=> nil2.2.3 :003 > puts Digest::MD5.hexdigest('I love you安红我爱你')
b10d890bf46b1a045eb99af5d43c7b13
=> nil2.2.3 :004 > puts Digest::MD5.hexdigest('I dont love you')
c82294c9a7b6e4a372ad25ed4d6011c9
=> nil2.2.3 :005 > puts Digest::MD5.hexdigest('I dont love you安红我爱你')
dce67bcdfdf007445dd4a2c2dc3d29c1
=> nil2.2.3 :006 >
如此一来 , 因为攻击者很难猜到“安红我爱你” , 那么自然彩虹表里是没有的 , 当然我建议你在实际项目中不要使用\"安红我爱你\" , 你应该使用一个连你自己都猜不到的较长的字符串 。
加盐了 , 就安全了吗?实际上 , 加盐并不能100%保证安全 , 假如有人泄露了你的Salt呢?实际上通过反编译程序很容易可以拿到这个 , 由于WEB程序一般放在WEB服务器上 , 那么就需要保证服务器不被攻击 , 当然这个是运维人员去操心 。
为了让加盐更安全 , 一般情况下我们可以使用一个“盐+盐” , 也就是为每个用户保存一个\"Salt\" ,然后再使用全局的盐 , 我们可以对用户的盐使用自己的加密算法 。 那么代码就如下:
if MD5(userInputPpassword+globalsalt+usersalt)===user.databasePassword)
{ login success
普通用户如何做?由于这个是写给程序员 , 当然是说在前端用户注册时密码应该如何设置 , 很简单 , 我们要求用户必须输入强密码!但是 , 我知道很多用户觉得很烦 , 这样你就失掉了一个用户 , 但我们需要做一个适当的折中 , 比如至少有一个大写字母 , 小写字母和数字的组合 。
最后我们来看看解决了之前文章下面例子的什么问题 。
假如 , 明明和丽丽相互不认识 , 明明想给丽丽写一封情书 , 让隔壁老王送去
- 如何保证隔壁老王不能看到情书内容?(保密性)
- 如何保证隔壁老王不修改情书的内容?(完整性)
- 如何保证隔壁老王不冒充明明?(身份认证)
- 如何保证明明不能否认情书是自己写的?(来源的不可否认)
【Java|如何安全保存用户密码及哈希算法】通过了解hash算法\"明明\" 就有办法让丽丽知道信的内容没有修改 , 他可以对邮件进行Hash生成邮件的摘要 , 然后让\"隔壁的李叔叔\"把摘要送给丽丽 , 丽丽拿到邮件的摘要后 , 把邮件内容也Hash一下 , 然后把结果和\"隔壁的李叔叔\"给的摘要对比一下 , 然后通过比较结果就知道邮件有没有被\"隔壁的王叔叔\"更改过了 。
- 厨房|刀可切菜灶可加热 儿童厨房玩具安全不能忽视
- 安全测试之渗透测试
- 创投圈|抖音小店无货源适合新手小白么?如何精细化运营?新手小白看来
- 松下|淘宝店铺信誉分等级如何提升?
- PHP|如何降低用户关注的非必要页面的权重传递?
- 量子纠缠存在于任何维度空间?人类如何逃出三维空间变成“神”?
- 显卡|如何组装旗舰游戏电脑?这里有你想要的答案
- 火星和地球交换位置会如何?火星会出现生命吗?答案没你想得简单
- 快手视频|视频号和抖音快手的差异化在哪里呢?你应该如何选择适合你的平台
- Java|干翻小米,红米又出超大杯旗舰,120W+2K直屏+双旗舰芯
