目前据说MD5部分不安全.考虑到这一点,我想知道用于密码保护的机制.
这个问题,"双重哈希"密码是否比仅仅哈希一次更安全? 建议多次散列可能是一个好主意,而如何实现单个文件的密码保护?建议使用盐.
我正在使用PHP.我想要一个安全快速的密码加密系统.散列密码一百万次可能更安全,但也更慢.如何在速度和安全性之间取得良好的平衡?另外,我更喜欢结果具有恒定数量的字符.
另外,我应该在数据库中存储两个字段(例如,一个使用MD5,另一个使用SHA)?它会使它更安全或更不安全吗?
如果我不够清楚,我想知道使用哪种散列函数以及如何选择好的盐以便拥有安全和快速的密码保护机制.
相关问题并不完全涵盖我的问题:
PHP中的SHA和MD5有什么区别
简单密码加密
存储密钥的安全方法,asp.net的密码
如何在Tomcat 5.5中实现salted密码
在工作中,我们有两种相互竞争的盐理论.我工作的产品使用类似用户名或电话号码来加密哈希值.基本上每个用户都有不同的东西,但我们可以随时使用.另一个产品为每个用户随机生成一个salt,并在每次用户更改密码时更改.然后在数据库中加密盐.
My question is if the second approach is really necessary? I can understand from a purely theoretical perspective that it is more secure than the first approach, but what about from a practicality point of view. Right now to authenticate a user, the salt must be unencrypted and applied to the login information.
在考虑之后,我只是没有从这种方法中看到真正的安全性收益.将盐从帐户更改为帐户,即使攻击者知道如何快速确定每个帐户的内容,仍然会使某人尝试强制执行散列算法变得非常困难.这是基于密码足够强的假设.(显然,找到一组密码的正确哈希值,它们都是两位数,比找到8位密码的正确哈希值要容易得多).我的逻辑是不正确的,还是我缺少的东西?
编辑:好的,所以这就是为什么我认为加密盐真的没有意义.(lemme知道我是否在正确的轨道上).
对于以下说明,我们假设密码总是8个字符,盐是5,所有密码都由小写字母组成(它只是使数学更容易).
Having a different salt for each entry means that I can't use the same rainbow table (actually technically I could if I …
据我了解,生成盐的最佳做法是使用源代码中存储的一些神秘公式(甚至魔术常量).
我正在研究一个我们打算作为开源发布的项目,但问题是源代码是生成盐的秘密公式,因此能够在我们的网站上运行彩虹表攻击.
我认为很多人在我面前都考虑过这个问题,我想知道最佳做法是什么.在我看来,如果代码是开源的话,根本就没有盐,因为盐可以很容易地进行逆向工程.
思考?
我继承了一个Web应用程序,我刚刚在SQL Server数据库中以纯文本形式存储了超过300,000个用户名/密码.我意识到这是一件非常糟糕的事情.
知道我必须更新登录和密码更新过程以加密/解密,并且对系统其余部分的影响最小,您会建议从数据库中删除纯文本密码的最佳方法是什么?
任何帮助表示赞赏.
编辑:对不起,如果我不清楚,我打算问你的加密/哈希密码的程序,而不是特定的加密/散列方法.
我应该只是:
我想我的关注更多来自于大量的用户,所以我想确保我正确地做到这一点.
我的理解是盐不是秘密的,它只是意图与任何集中标准不同,所以你不能开发彩虹表或类似的攻击来打破使用该算法的所有哈希值,因为盐分断裂彩虹桌.我在这里的理解可能不完全正确,所以如果我错了,请纠正我.
在一个广泛使用的开源软件中,盐会广为人知,这会让你受到攻击,因为现在他们可以简单地攻击哈希的盐渍版本并创建包含盐数据的彩虹表.
我认为,有两种方法可以解决这个问题.首先是使用每个新版本的软件更改salt,但这并不好,因为该软件的新版本将无法再针对旧密码哈希进行测试.
我想到的第二个解决方案是存储每个密码的盐; 换句话说,每个密码都有不同的盐.缺点是盐必须以某种方式与密码哈希相关联,可能只是将它们紧紧地放在数据库中的密码旁边.甚至可以使用用户名(但可能不会,用户名可能太短).
我的问题是,这可以接受吗?直接使用哈希密码存储盐有任何额外的风险吗?在我看来,在源代码中存储salt没有什么不同,因此通过使用密码存储salt不会造成安全性损失.
免责声明:我没有将它用于任何现实生活中的安全系统.事实上,我从未设计过任何类型的密码系统.我只是对自己的安全问题进行了模糊的教育.
什么是用于保护数据库中密码的简单加密方案?我不一定需要任何超安全的东西,也不需要任何快速闪电的东西,但那些东西会很好.首先,我只想要一些易于实现而不会非常缓慢或不安全的东西.
我是一个(接近完整的)初学者,这是我第一次尝试加密 - 实际上这可能是我第一次使用这个词了.
这是我的问题:对于非银行/军事,甚至是商业网络应用程序,选择用于密码的哈希函数的盐的正确方法是什么?
我可以轻松地为每个新用户生成一个伪随机盐,并在应用哈希函数之前将该盐附加到他们的pw.但是我仍然需要存储盐,所以大概任何能够访问哈希密码的人都会获得盐.
盐的好处只是让pw"更随机",因此打败了基于标准字典的彩虹表吗?
以下任何一个都是好的和实用的想法:
作为一个附带问题,在升级网站软件时更改盐渍哈希算法有多容易?现在感觉很噩梦.
我使用简单的md5($password);格式,但我想添加盐,所以我怎么能这样做?
这是我的代码:
if($success)
{
$data['firstname'] = $firstname;
$data['lastname'] = $lastname;
$data['username'] = $username;
$data['password'] = md5($password);
$data['email'] = $email;
$newUser = new User($data);
$newUser->save(true);
$Newuser->login($username, $password);
header("Location: welcome.php");
}
Run Code Online (Sandbox Code Playgroud) 我知道MD5的安全性最近有问题,这就是很多人使用盐的原因(我根本不明白这一点)但是我想知道你是否想在php中轻松实现安全系统你能不能两次md5 ?
像test> 098f6bcd4621d373cade4e832627b4f6>fb469d7ef430b0baf0cab6c436e70375
所以基本上:
$val = 'test';
$val = md5($val);
$val = md5($val);
Run Code Online (Sandbox Code Playgroud)
这会解决整个彩虹安全问题吗?有没有一个简单/ noob证明的方式在PHP中制作安全的数据库密码?
如何使用PHP为每个密码实现一个用于存储和比较2048位哈希值的密码的算法?
编辑1:
我想我的问题不够清楚.我的意思是我不会制作加密算法.但是如何存储密码和盐.作为每个密码的随机盐.那么,将盐和密码一起存储在数据库中是不明智的.
编辑2:
那会是一个好方法吗?
1)用户输入密码,
2)系统生成密码的哈希值,
3)系统为此盐生成密码(我用time()?)
作为随机盐,如何以及在哪里可以将盐存储到密码?请,我不想将盐与密码一起存储,因为我认为这不太确定.
因此,在用户登录后存储的密码和相同的盐之后,我将获得与盐一起存储的密码哈希值,并将其与保存的盐提供的密码的哈希值进行比较.
在哪里保存盐?这样做是一个很好的方法吗?
我正在使用PHP和Mysql.我想知道如何使用MD5发送密码哈希,并希望在用户尝试登录时检查它.我试过了,但它无法正常工作.如果有人知道怎么做,请提供代码.
security ×8
hash ×6
php ×5
encryption ×4
passwords ×4
salt ×4
md5 ×2
brute-force ×1
database ×1
mysql ×1
open-source ×1
protection ×1
rainbowtable ×1