我在谷歌上搜索过正确的方法,但是有很多不同的方法。所以我想出了这个,不介意一些批评和更好实践的链接。
//注册表格-用户提供用户名(电子邮件)密码(文本)//
所以我抓取数据:
$user = mysql_real_escape_string($_POST['user']);
$pswd = mysql_real_escape_string($_POST['pass']);
$salt = hash( 'sha256', microtime() . rand() );
$encrypt = hash( 'sha256', $pswd . $salt );
然后将user_email| encrypted_pass|salt插入数据库
//登录表单-用户提供用户名(电子邮件)密码(文本)//
所以首先根据用户(电子邮件)我抓取encrypted_pass和盐信息。然后
$user = mysql_real_escape_string($_POST['user']);
$pswd = mysql_real_escape_string($_POST['pass']);
$encrypted_pass_fromDB = $var['encrypted_pass'];
$salt_fromDB = $var['salt'];
if (hash( 'sha256', $passwrd . $salt_fromDB) === $encrypted_pass_fromDB)
{
echo "GOT IT!";
}
我读过bcrypt是一个更好的选择,但是现在我想更好地理解SALT方法。同样,当我使用$options = ['cost' =
任何意见都值得赞赏!谢谢!
PHP现在提供了一种生成安全密码哈希的简单方法,我们应该使用它,看看函数password_hash()。
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
当然,了解盐是如何工作的(以及正确处理它有多难)是很好的,所以尝试一下,但要为你的生命系统使用上面的功能。
您应该使用内置的crypt
功能:
http://php.net/crypt
你有两个选择:
让PHP Crypt生成salt
$user = mysql_real_escape_string($_POST['user']);
$pswd = mysql_real_escape_string($_POST['pass']);
//Salt is generated automatically
$encrypt = crypt( $pswd );
自己生成盐
$user = mysql_real_escape_string($_POST['user']);
$pswd = mysql_real_escape_string($_POST['pass']);
//These are the settings for the salt (Separated so you can understand it)
$algorithm = "2a";
$length = "12";
//Start the salt by specifying the algorithm and length
$salt = "$" . $algorithm . "$" . $length . "$";
//Add on random salt and make base64 adjusted for bcrypt's version
$salt .= substr( str_replace( "+", ".", base64_encode( mcrypt_create_iv( 128, MCRYPT_DEV_URANDOM ) ) ), 0, 22 );
//Encrypt with your generated salt
$encrypt = crypt( $pswd, $salt );
验证它很容易:
if ( $encrypted_pass_fromDB_with_salt === crypt( $passwrd, $encrypted_pass_fromDB_with_salt ) ) echo "ok";
在向哈希值中添加盐时,唯一可以防止的就是使用称为“彩虹表”的大型预先计算哈希表。这些在很长一段时间内都不是一个主要问题,但因为:
更好的算法将密码散列数千次,并以加密的“适当”方式应用给定的salt,使其更难破解。然而,它们所基于的哈希算法(如SHA和MD5)被设计为小而快,并且对它们进行暴力破解需要大量的CPU时间,这是廉价且易于并行化的。
Bcrypt不同。它使用Blowfish算法,需要相对大量的RAM,这很昂贵,因此难以并行化。这就是为什么每个人都如此强烈地推荐它。
TL;DR Hashing比明文更好,salted比unsalted更好,bcrypt比几乎所有其他东西都好,所以frickin使用它。
我一直在阅读OWASP10,我遇到了存储信息的最佳实践。咸杂碎。在这里,您为每个密码生成一个随机的salt,并对其进行梳理、散列和存储。我的疑问是,如果salt是随机生成的,当用户键入密码时,如何对密码进行身份验证?salt是否与用户名一起保存?如果是这样,这种做法仍然是脆弱的。或者他们是怎么做到的?
我正在尝试将用户从旧的Drupal6 CMS迁移到KeyCloak。我想迁移用户与他们的旧密码,然后分配一个“更新密码”要求的行动到他们的个人资料。 然而,迁移密码似乎有问题,因为我只能以散列形式访问它们。 null 有没有人有幸让这个功能发挥作用?
下午好我自己在一个安全项目中工作。我在PHP中检查登录代码时遇到问题。我不知道为什么,但当我尝试与我创建的“数据库中的密码为纯文本”的用户登录时,它会说密码不正确。 其思想不是将密码转换为散列。我知道这是一个很大的安全风险,但显然我不会将其用于专业用途。我的目的是做安全测试。 check.php: 编辑我已经纠正了错误,但我仍然有问题的日志,出现一个menssage:"姓名或密码不正确!".在我的
如果你已有幕布,直接登录即可。如果还没有账号,可以使用手机号码注册幕布账号,也可以通过QQ、微信直接注册并登录。 注:微信登录方式需要手机上安装有微信。 账号设置与绑定 登录幕布后,点左上角的头像或者轻按屏幕从左往右滑动,选择「应用设置 - 账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解除绑定需要在电脑上登录
在首页点击注册进入注册页面,你可以使用手机号码注册幕布账号,也可以通过QQ、微信账户直接创建账号并登录。 账号设置与绑定 登录幕布后,点击右上角处用户头像,在下拉菜单中选择「账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号,查看账号是否为高级版以及高级版到期时间。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解绑最后一个登录方式后,账号将无法登录,请注意将文档
注册 / 登录 1.注册 注册入口: 访问 http://www.aikf.com/ 点击右上角注册按钮 输入注册手机号、图形验证码、手机验证码等进行注册 其他注册入口:手机登录http:/www.aikf.com/ 爱客服官方微信公众号注册:点击立即注册 2.登录 登录入口: 访问http://www.aikf.com/ 点击登录 输入用户名及登录密码,点击登录(见下图) 2.修改密码 在登录入