我正在做一些研究或谷歌搜索处理密码散列和盐析的不同方法,并遇到了这个有趣的链接:
现在,基本上建议的是创建两个用户函数,一个用于散列,另一个用于检查散列.
盐是伪随机的,但实际上是基于密码(让我感觉不好?).
散列函数也伪随机地"散布"哈希字符串中的盐.
哈希检查功能反转盐洒,然后进行实际的哈希检查.
现在,我知道每个密码哈希的唯一salt =好,但是具有散列密码并创建存储在db函数中的salt的逻辑可能=坏.
我喜欢盐不明显的想法,它也不需要基于一些有希望的一致性值,如用户名,用户ID,出生日期等,但正如我所说,我确实对实现有疑问.
那么,人们对"最佳方法解决方案"的看法和想法是什么?
在我更清楚之前,我实现了一个使用md5作为哈希算法的登录系统.现在我知道的更好了,我想转向使用PHPass.我的问题是系统已经投入生产,要求所有用户更改密码将成为所有头痛的母亲.
我想出了一个简单的解决方案,但考虑到我之前的错误,我想确保我不会因为无知而犯同样严重的错误.
我的解决方案如下:
更改
md5($_POST['pass'])至
md5($_POST['pass'])$hasher->HashPassword()$hasher->CheckPassword()根据DB的值检查重新散列的密码为了清楚起见,我只是重新编写了md5版本,因为这是我在数据库中已有的内容.它并不是一种额外的安全措施(尽管如此,那太棒了!).
可能重复:
"双重散列"密码是否比仅仅散列一次密码更安全?
我在PHP中使用sha1加密密码,但我想知道散列散列是否比散列密码更安全.
例如:
是
$hash = sha1($pwd);
Run Code Online (Sandbox Code Playgroud)
任何不太安全的
$hash = sha1(sha1($pwd));
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它不会,因为反向查找站点将无法找到哈希哈希的匹配.
我已经阅读了很多关于SO如何实现密码哈希的文章。而且我读到,您不应该多次对密码进行哈希处理(嗯,据说这样做没有太大帮助)。但是为什么不呢?如果我迭代哈希密码,可以说是10,000,000次(因为用户可以等待3秒才能完成注册,或者我可以通过发送AJAX请求来完成此操作)。
那么,攻击者如何窃取我的数据库,甚至知道我只对密码进行10,000,000次迭代(最坏的情况),也可能发现用户的密码?他无法创建彩虹表,因为这将花费他很长时间(哈希密码需要时间,而哈希哈希需要很多次则需要更多时间),强力破解也不可能,那么还剩下什么呢?
我正在为一家财富100强企业工作,我将面临从SHA1到SHA-2的安全任务.这不是我的专业领域,但在我研究密码学时,我质疑过时的信息等......
显然需要SHA-2而不是SHA-1,但是当安全团队知道密码+盐的散列使用SHA时,GPU在破解数十亿个哈希值时非常快速 - 我不知道为什么密码我不是被告知使用bcrypt或其他慢速的等效物,为什么?
我看到了一张幻灯片,我被告知要制作我的盐60,000次.我搜索了整个互联网,我没有看到任何这样的建议或例子.为什么?
我正在使用C#
string SaltAndPwd = string.Concat(plainTextPassword, salt);
SHA256 sha2 = SHA256Managed.Create();
byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd));
Run Code Online (Sandbox Code Playgroud)
我想我并没有被告知反复创建一个盐,而是一遍又一遍地创建哈希.
这种逻辑是否合适?
string plainTextPassword = "aF7Cvs+QzZKM=4!";
string salt = "o9kc5FvhWQU==";
SHA256 sha2 = SHA256Managed.Create();
for(var i = 0; i <= 60000; i++)
{
byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd));
}
Run Code Online (Sandbox Code Playgroud)
如何使此散列正常工作?
更新发现了powerpoint幻灯片
使用代码更新 - 验证哈希的实现问题
问题是当我使用我正在尝试的代码检查时
if (resultHash.Equals(hassPassword)) ,它不匹配...
public string BuildVerify()
{
string password = "";
string salt = "";
byte[] result;
using (var sha256 = SHA256.Create())
{
password = "hovercraft";
// …Run Code Online (Sandbox Code Playgroud) 我的第一个问题是,我听说过将字符串哈希2次(例如sha1(sha1(密码))),因为第二个哈希有一个固定的长度,是真的吗?
我的第二个问题是哪个更安全?(var1和var2是2个字符串):
如果是第一个,是否值得性能成本?
我试图了解需要在Web应用程序中发送哪些信息.基本上我有一个在Web服务器上运行的Web应用程序,一个数据库,其中包含带有哈希密码和salt的用户表,当然还有启用了javascript的Web客户端.
当用户登录登录时,在客户端输入用户名和密码.我想知道发送了什么信息.Web客户端是否以纯文本形式发送了密码,或者是否使用javascript来散列密码而没有盐并发送了hased结果?或者客户端是否从服务器获取纯文本的盐,然后客户端发送了密码+盐?
哈希和哈希哈希的最佳方法是什么?哈希是否可以将MD5作为哈希?hash(password_plain_text + salt)与hash(hash(password_plain_text)+ salt)有何关系,其中+是字符串连接?
有一段时间我一直在寻找一种更安全的方法来在我的网站上散列用户密码,以便插入到数据库中.我已经研究了所有可用的散列方法.有人说bcrypt是最好的,因为它的速度很慢.我在想,如果我不需要最高的安全性,但仍然保持安全.如果我在该哈希上使用sha512然后使用md5会怎么样?如果我改变了哈希的顺序,这有关系吗?请记住,我将为每个操作使用单独的盐.这有多安全?是否有其他组合可以做同样的事情?
我是php编程和php安全问题的新手,将密码多次哈希是安全的,互联网上的其他人说它会带来冲突或根本不安全,所以我的问题是如果实施哈希方法是安全的像这样.我尝试了多种东西和组合,结果不一样,但是它真的让密码安全吗?
$input_pass = 'example';
$step1 = md5($input_pass);
$final_pass = hash('sha512',crypt(pi(),hash('sha512',$input_pass)));
Run Code Online (Sandbox Code Playgroud)
谢谢, :)
我正在使用PHP.我想要一个安全快速的密码加密系统.散列密码一百万次可能更安全,但也更慢.如何在速度和安全性之间取得良好的平衡?我想知道php中最好的加密方法以及如何应用它.
好的,因此哈希的整个问题是用户不会输入长度超过15个字符的密码.大多数人只使用4-8个字符,使攻击者很容易用彩虹表破解.
解决方案,使用用户salt使哈希输入更复杂,超过50个,这样他们就永远无法生成一个表(对于那些大小的字符串来说是大的).另外,他们必须为每个用户创建一个新表.问题:如果他们下载数据库,他们将获得用户盐,所以如果他们足够关心你就回到原点.
解决方案,使用网站"胡椒"加上用户盐,然后即使他们得到数据库,他们仍然必须知道配置文件.问题:如果他们可以进入您的数据库,他们可能也会进入您的文件系统并发现您的网站.
因此,所有这些都已知 - 让我们假设攻击者进入您的网站并获取所有内容,一切都是如此.那你现在做什么?
在讨论的这一点上,大多数人回答"谁在乎这一点?".但这只是一种廉价的说法,"我不知道下一步该做什么,所以它不可能那么重要".可悲的是,在其他任何地方我都问过这个回答的问题.这表明大多数程序员都错过了一个非常重要的观点.
让图像显示您的网站就像其他95%的网站一样,用户数据 - 甚至是完全的服务器访问 - 都不值得蹲下.攻击者碰巧是在你的一个用户"Bob"之后,因为他知道"Bob"在你的网站上使用与在银行网站上使用相同的密码.他也碰巧知道鲍勃在那里有他的人生储蓄.现在,如果攻击者可以破解我们的网站哈希,剩下的将是小菜一碟.
所以这是我的问题 - 如何在没有任何可追踪路径的情况下扩展密码的长度?或者,如何使哈希过程复杂化并及时复制?我唯一想到的就是你可以重新散列数千次哈希,并将创建最终彩虹表所花费的时间增加1000倍.这是因为攻击者在创建表时必须遵循相同的路径.
还有其他想法吗?
如果我哈希两次密码:
$psw1= password_hash($password,PASSWORD_DEFAULT);
$psw2=password_hash($psw1,PASSWORD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)
这更安全还是没用?
PS:我是php的新手
hash ×6
php ×6
security ×5
passwords ×4
encryption ×2
mysql ×2
salt ×2
c# ×1
cryptography ×1
javascript ×1
md5 ×1
migration ×1
phpass ×1
rainbowtable ×1
sha ×1
sha1 ×1
sha256 ×1
sha512 ×1