我不时听到"使用bcrypt在PHP中存储密码,bcrypt规则"的建议.
但是什么bcrypt呢?PHP没有提供任何此类功能,维基百科关于文件加密实用程序的唠叨和Web搜索只是揭示了不同语言的Blowfish的一些实现.现在Blowfish也可以通过PHP获得mcrypt,但是如何帮助存储密码?Blowfish是一种通用密码,它有两种工作方式.如果它可以加密,则可以解密.密码需要单向散列函数.
解释是什么?
在存储之前对密码进行两次哈希处理的安全性是否比仅仅哈希一次更安全?
我在说什么是这样做的:
$hashed_password = hash(hash($plaintext_password));
Run Code Online (Sandbox Code Playgroud)
而不仅仅是这个:
$hashed_password = hash($plaintext_password);
Run Code Online (Sandbox Code Playgroud)
如果它不太安全,你能提供一个很好的解释(或链接到一个)吗?
此外,使用的哈希函数是否有所作为?如果混合使用md5和sha1(例如)而不是重复相同的散列函数,它会有什么不同吗?
注1:当我说"双重哈希"时,我正在谈论两次哈希密码以试图使其更加模糊.我不是在谈论解决碰撞的技术.
注2:我知道我需要添加一个随机盐来真正使其安全.问题是使用相同算法进行两次散列是否有助于或损害散列.
我想在php中生成一个随机密码.
但是我得到所有'a'并且返回类型是数组类型,我希望它是一个字符串.有关如何更正代码的任何想法?
谢谢.
function randomPassword() {
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
for ($i = 0; $i < 8; $i++) {
$n = rand(0, count($alphabet)-1);
$pass[$i] = $alphabet[$n];
}
return $pass;
}
Run Code Online (Sandbox Code Playgroud) 这比普通MD5更安全吗?我刚刚开始研究密码安全性.我是PHP的新手.
$salt = 'csdnfgksdgojnmfnb';
$password = md5($salt.$_POST['password']);
$result = mysql_query("SELECT id FROM users
WHERE username = '".mysql_real_escape_string($_POST['username'])."'
AND password = '$password'");
if (mysql_num_rows($result) < 1) {
/* Access denied */
echo "The username or password you entered is incorrect.";
}
else {
$_SESSION['id'] = mysql_result($result, 0, 'id');
#header("Location: ./");
echo "Hello $_SESSION[id]!";
}
Run Code Online (Sandbox Code Playgroud) 最近我一直试图在我在互联网上偶然发现的登录脚本中实现我自己的安全性.在努力学习如何制作我自己的脚本为每个用户生成一个盐之后,我偶然发现了password_hash.
根据我的理解(基于本页的阅读:http://php.net/manual/en/faq.passwords.php),当您使用password_hash时,已经在行中生成了salt.这是真的?
我的另一个问题是,含有2种盐是不是很聪明?一个直接在文件中,一个在DB中?这样,如果有人在数据库中泄露了你的盐,你仍然直接在文件中?我在这里读到,存储盐绝不是一个明智的想法,但它总是让我困惑的是人们的意思.
我正在阅读本教程中的一个简单的PHP登录系统.
最后,它建议您使用md5()加密密码.
虽然我知道这是一个初学者的教程,你不应该把银行对帐单放在这个登录系统后面,这让我想到加密.
所以我继续前进(本网站为新手提供的最有用的问题之一):开发人员在构建公共网站之前应该知道什么?
它说(在安全下)你应该:
加密哈希和盐密码而不是将它们存储为纯文本.
它没有更多关于它,没有参考.
所以我继续自己尝试:
$pass = "Trufa";
$enc = md5($pass);
echo $enc; #will echo 06cb51ce0a9893ec1d2dce07ba5ba710
Run Code Online (Sandbox Code Playgroud)
这就是让我思考的问题,虽然我知道md5()可能不是加密的最强方法,但任何总能产生相同结果的东西都可以进行逆向工程.
那么使用md5()或任何其他方法加密某些东西的感觉是什么?
如果黑客获得用md5()加密的密码,他就会使用这个页面!.
那么现在的实际问题是:
我知道我没有在这里发现一个巨大的网络漏洞!:)我只是想了解密码加密背后的逻辑.
我确定我理解错了,如果你能帮助我设置我的和其他人(我希望),我会很感激.
您将如何应用密码加密以使其实际有用?
正如我所说的那样,我可能/错误地认为整个想法是错误的,但是,这种方法是否会在真实环境中增加安全性?
$reenc = array(
"h38an",
"n28nu",
"fw08d"
);
$pass = "Trufa";
$enc = chunk_split(md5($pass),5,$reenc[mt_rand(0,count($reenc)-1)]);
echo $enc;
Run Code Online (Sandbox Code Playgroud)
如你所见,我随机地将任意字符串($reenc = array())添加到我的md5()密码"使其独一无二".这当然只是一个愚蠢的例子.
我可能错了,但除非你"亲自加密",否则它将永远是可逆的.
以上将是我的"密码保护"和加密密码的想法,如果黑客到达它,他将无法解密它,除非他可以访问原始.php
我知道这甚至没有意义,但我无法弄清楚为什么这是个坏主意!
我希望我已经足够清楚了,但这是一个很长的问题所以请求任何澄清!
提前致谢!!
我需要在postgresql上使用salt散列一些密码,而且我无法找到有关如何完成这些操作的任何相关文档.
那么如何在postgresql中散列密码(带有一些盐)呢?
假设您可以自由决定如何将散列密码存储在DBMS中.像这样的计划有明显的弱点吗?
要创建存储在DBMS中的哈希值,请执行以下操作:
这意味着任何想要发生冲突的人都必须分别为每个用户名和每个DBMS服务器实例单独完成工作.我打算保持实际的哈希机制有点灵活,以允许使用仍在使用的新NIST标准哈希算法(SHA-3).
"DBMS服务器实例独有的值"不一定是秘密的 - 尽管它不会随便泄露.目的是确保如果有人在不同的DBMS服务器实例中使用相同的密码,则记录的哈希值会有所不同.同样,用户名也不是秘密 - 只需要密码.
首先使用密码以及用户名和"唯一值"第二个,或三个数据源的任何其他排列是否有任何优势?或者交错字符串怎么样?
我是否需要添加(并记录)随机盐值(每个密码)以及上述信息?(优点:用户可以重新使用密码,但仍然可能会在数据库中记录不同的哈希值.缺点:必须记录盐.我怀疑其优势远大于缺点.)
有很多相关的SO问题 - 这个列表不太可能是全面的:
我认为这些问题的答案支持我的算法(尽管如果你只是使用随机盐,那么'每个服务器的唯一值'和用户名组件就不那么重要了).
可能重复:
PHP密码的安全散列和盐
警告不要将MD5用于密码,请使用像bcrypt这样的替代方法
对于我的密码,我应该使用这样的盐(盐对每个用户都是唯一的,而不是直接用密码存储)...
$salt = sha1(md5("coders gonna code"));
$password = md5($salt.$password);
Run Code Online (Sandbox Code Playgroud)
或者如果我刚才使用它会没关系:
$password = md5($password);
Run Code Online (Sandbox Code Playgroud)
因为如果我使用盐,即使用户填写密码这样的密码也不重要,因为盐(在这种情况下)将是145ac26ff093c6e1317f7d5fb4c9fd11c77be975如此密码的条目将145ac26ff093c6e1317f7d5fb4c9fd11c77be975password根据http://howsecureismypassword.net/它需要3亿十亿年到破解....所以意见?或者我应该更糟糕的去吧
$password = md5($salt.$password.md5($salt));
Run Code Online (Sandbox Code Playgroud)
如果这个人已经走得足够远以获得盐哈希,那么任何东西都可以停下来再进一步吗?<更多声明此最后一个密码
对于那些说每个用户都应该这样做的人......我知道,这只是一个例子.
php ×7
security ×7
passwords ×6
salt ×5
cryptography ×3
hash ×3
bcrypt ×1
encryption ×1
md5 ×1
postgresql ×1
random ×1