我正在阅读一些关于盐和密码哈希的文章,还有一些人提到彩虹攻击.什么是彩虹攻击以及防止它的最佳方法是什么?
我一直在查看hashlib文档但是在散列数据时没有找到任何关于使用salt的内容.
帮助会很棒.
如何使用Spring Security 3散列密码并加密它们?
好的,我想了解使用盐的原因.
当用户注册时,我为他/她生成一个我存储在DB中的唯一盐.然后我用SHA1散列它和密码.当他/她登录时我会重新哈希sha1($salt.$password).
但如果有人攻击我的数据库,他可以看到哈希密码和盐.
是否更难破解而不仅仅是用盐哈希密码?我不明白......
对不起,如果我是傻瓜......
我正在尝试使用bcryptjs生成用户密码的哈希值.但是我在一件事情上有点困惑.
按照惯例,根据这一条款,我们需要:
因此,当我们在验证用户时比较哈希时,我们将存储的盐附加到用户输入的密码,并将其与来自数据库的哈希进行比较.
然而,使用hashSync和compareSync bcryptjs如下:
//hashSync to generate hash
var bcrypt = require('bcryptjs');
var password = "abc";
var hash = bcrypt.hashSync( <some string>, < integer length of salt>) // the salt of mentioned length(4-31) is self-generated which is random and fairly unique
//compareSYnc to compare hash
var testString="abc";
console.log(bcrypt.compareSync(testString, hash)) // compares with previously generated hash returns "true" in this case.
Run Code Online (Sandbox Code Playgroud)
我感到困惑的是,如果我们在验证时不需要盐,那么产生它的意义何在?compareSync返回时true无需访问salt.所以它不会让相对较小的密码容易遭受暴力攻击吗?无论盐的大小如何,以下所有内容都返回true:
console.log(bcrypt.compareSync("abc", bcrypt.hashSync("abc"))); // consoles true. by default, if …Run Code Online (Sandbox Code Playgroud) 我最近开始设置PureFTP服务器的任务.在工作中我们使用Postgresql 8.4.架构基本上归结为,
username text
password character(40)
password_salt text
Run Code Online (Sandbox Code Playgroud)
该password存储为哈希sha1( password + salt ).使用Postgresql的pgcrypto我可以提供一个username,password并找出用户是否有auth:
SELECT
encode( digest( $password ||password_salt, 'sha1' ), 'hex' ) = password
AS password_correct
, username
, password
, password_salt
FROM contact.person;
Run Code Online (Sandbox Code Playgroud)
现在我遇到的问题是这样的功能需要我将密码输入查询.Pureftp目前的auth-postgresql实现似乎不太可行.它仅支持提供:
\L is replaced by the login of a user trying to authenticate.
\I is replaced by the IP address the client connected to.
\P is replaced by the port number the client connected to.
\R is replaced …Run Code Online (Sandbox Code Playgroud) 我正在使用Adam Griffiths的CodeIgniter身份验证库,我正在调整用户模型.
我遇到了他用来生成令牌的生成函数.
他首选的方法是引用random.org的值,但我认为这是多余的.我正在使用他的后退方法随机生成一个20个字符长的字符串:
$length = 20;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$token = '';
for ($i = 0; $i < $length; $i++) {
$token .= $characters[mt_rand(0, strlen($characters)-1)];
}
Run Code Online (Sandbox Code Playgroud)
然后他使用盐哈希这个令牌(我正在梳理来自不同功能的代码)
sha1($this->CI->config->item('encryption_key').$str);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何理由通过盐渍哈希运行令牌?
我已经读过,只是随机生成字符串是一种天真的方式来制作随机密码但是sh1哈希和盐是必要的吗?
注意:我从https://www.grc.com/passwords.htm获取了我的encryption_key (63随机字母数字)
我正在浏览Michael Hartl的书(真棒,免费资源,顺便说一下,谢谢迈克尔!)我有一个关于盐渍和哈希密码的问题.腌制密码的目的是防止黑客进行彩虹攻击,如果我理解正确的话,如果黑客可以猜测所使用的加密类型,那么基本上就是暴力攻击.为了防止这种攻击,使用salt在密码加密之前随机化密码,但该密码必须与加密密码一起存储?如果是这样,那么如果黑客可以访问数据库并检索加密密码,那么他们是否也无法检索盐并继续进行彩虹攻击?
这是Michael的代码示例...
>> Time.now.utc
=> Fri Jan 29 18:11:27 UTC 2010
>> password = "secret"
=> "secret"
>> salt = secure_hash("#{Time.now.utc}--#{password}")
=> "d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8"
>> encrypted_password = secure_hash("#{salt}--#{password}")
=> "69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847"
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我想建立一个允许将加密密码(哈希密码)从一个系统迁移到另一个系统的系统.我该怎么办?
说2个月后,我发现加密速度提高了10倍,目前的哈希函数已经被证明毫无疑问,完全是脆弱的.我将如何将用户密码从一种类型的哈希迁移到另一种哈希(更好的一种).
前几天我在课堂上,我们正在谈论 Unix SALT 以及它如何使密码更难猜测。我的问题是 SALT 以明文形式存储在散列密码旁边,那么如何使其更安全?我的意思是如果 SALT 就在那里,那么你附加它然后散列你的猜测。此外,关于在彩虹表中预先计算猜测的问题对我来说也没有意义。您只需查看 SALT 并首先使用给定的 SALT 预先计算它。我能想到的唯一论点是恶意用户无法访问 /etc/password 文件,但黑客如何知道密码的哈希值。如果有人能指出我正确的方向,我将不胜感激。谢谢!
saltedhash ×10
hash ×4
salt ×4
encryption ×2
bcrypt ×1
cryptography ×1
hashlib ×1
java ×1
migration ×1
node.js ×1
passwords ×1
postgresql ×1
pureftpd ×1
python ×1
sha ×1
spring ×1
unix ×1