我在理解盐密封的目的时遇到了一些麻烦.据我所知,主要用途是阻碍彩虹表攻击.但是,我看到实现这一点的方法似乎并没有真正解决问题.
我见过许多教程,建议将盐用作以下内容:
$hash = md5($salt.$password)
Run Code Online (Sandbox Code Playgroud)
原因是哈希现在不映射到原始密码,而是密码和盐的组合.但是说$salt=foo和$password=bar和$hash=3858f62230ac3c915f300c664312c63f.现在有人用彩虹表可以反转哈希并提出输入"foobar".然后他们可以尝试所有密码组合(f,fo,foo,... oobar,obar,bar,ar,ar).获取密码可能需要几毫秒,但其他情况并不多.
我见过的其他用途是在我的linux系统上.在/ etc/shadow中,散列密码实际上与 salt一起存储.例如,"foo"的盐和"bar"的密码将散列到此:$1$foo$te5SBM.7C25fFDu6bIRbX1.如果一个黑客以某种方式能够得到这个文件,我不知道盐服务的目的是什么,因为te5SBM.7C25fFDu6bIRbX已知反向哈希包含"foo".
感谢任何人都可以解决这个问题.
编辑:谢谢你的帮助.为了总结我的理解,salt使得散列密码更加复杂,从而使得它更不可能存在于预先计算的彩虹表中.我之前误解的是,我假设所有哈希都存在彩虹表.
对于那些在Go中构建RESTful API和JS前端应用程序的人,您如何管理身份验证?您使用的是任何特定的库或技术吗?
我很惊讶地发现这个问题很少.我记得下面的答案,我试图避免开发自己的实现:
每个人都分别编写自己的解决方案吗?
我一直都很好奇...在使用散列密码进行散列时哪个更好:前缀或后缀?为什么?或者它是否重要,只要你加盐?
为了解释:我们所有(希望)现在我们应该知道盐之前,我们哈希它存储在数据库中的密码[ 编辑:所以你能避免类似的事情发生了什么杰夫阿特伍德最近.通常,这是通过在将盐传递给散列算法之前将盐与密码连接来完成的.但是这些例子各不相同......有些例子在密码之前加盐.一些示例在密码后添加salt .我甚至看到过一些尝试将盐放在中间的人.
那么哪种方法更好,为什么呢?有没有一种方法可以减少哈希冲突的可能性?我的谷歌搜索没有找到关于这个问题的体面分析.
编辑:很棒的答案人们!对不起,我只能选一个答案.:)
我有一个数据库,许多不同的客户端应用程序(一些Web服务,一些Java应用程序和一些点网应用程序)连接到.并非所有这些都在Windows上运行(遗憾的是,否则只需启用数据库连接的Windows身份验证就可以解决这个问题).目前,密码存储在系统周围的各种配置/属性文件中.理想情况下,只有支持人员才能访问运行文件的服务器,但如果其他人获得对其中一个服务器的访问权限,他们将拥有足够的数据库权限,以便立即获得公平的数据查询.
那么我的问题是,保持密码可配置的最佳方法是什么,而不会让随意的人类读者轻易获得?
编辑只是为了澄清,DB服务器是Windows Server 2003,运行MSSQL 2005.
PS:我没有看到任何重复的问题,但如果有,请随时关闭这个.
我正在使用Mysql,我认为最好将用户个人信息及其登录名和密码分成两个不同的表,然后在两者之间引用它们.
注意:为了澄清我的帖子,我了解保护密码(哈希,盐等)的技巧.我只知道,如果我遵循生命中其他部分(投资,数据备份,甚至是个人存储)的做法,在最坏的情况下(包括表格或火灾),在表格之间分配信息可以保护您的其他数据.
根据问题,在php页面上存储密码是否安全
$password = 'pa$$w0rd';
Run Code Online (Sandbox Code Playgroud)
如果用户看不到它,那就安全了吧?
编辑:有些人实际上建议使用哈希,但是,数据库服务器连接密码会出现问题,不是吗?
我正在开发一个登录模块.我只是想知道你可以允许的用户名和密码的首选长度是什么?为什么?
提前致谢!
我不是指不必使用的密码(例如我网站上其他用户的密码- 在这种情况下我真的不需要存储它们.请参阅https://stackoverflow.com/a/ 1054069/939213.)所以简单地存储哈希不是一种选择.
我指的是将密码存储到SQL数据库以及共享服务器上的软件必须使用的私钥.
我认为没有真正安全的方法来做到这一点.我只是想知道在这种情况下最好的是什么.
我试图让他们远离黑客(在同一个网络主机上).不是其他有权查看文件的人.
这将是使用它们的ASP.Net代码隐藏.
MongoDB和Node.js的新手。我试图通过mongo给我的连接字符串连接到我的mongoDB服务器:
“ mongodb + srv:// david:password@cluster0-re3gq.mongodb.net/test?retryWrites = true”
在我的代码中,我像这样通过猫鼬调用连接(显然输入了密码):
const mongoose = require('mongoose');
const db = 'mongodb+srv://david:<password>@cluster0-re3gq.mongodb.net/test?retryWrites=true'
mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true
})
.then(() => console.log('MongoDB connected...'))
.catch(err => console.log(err));
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,出现以下错误
“ MongoError:错误的身份验证失败。”
关于这意味着什么的任何想法?谢谢!