我正在做一些研究或谷歌搜索处理密码散列和盐析的不同方法,并遇到了这个有趣的链接:
现在,基本上建议的是创建两个用户函数,一个用于散列,另一个用于检查散列.
盐是伪随机的,但实际上是基于密码(让我感觉不好?).
散列函数也伪随机地"散布"哈希字符串中的盐.
哈希检查功能反转盐洒,然后进行实际的哈希检查.
现在,我知道每个密码哈希的唯一salt =好,但是具有散列密码并创建存储在db函数中的salt的逻辑可能=坏.
我喜欢盐不明显的想法,它也不需要基于一些有希望的一致性值,如用户名,用户ID,出生日期等,但正如我所说,我确实对实现有疑问.
那么,人们对"最佳方法解决方案"的看法和想法是什么?
我有一个分类广告网站,每个人都可以放置他们产品的广告.
对于每个分类,用户必须输入密码(以便他们可以随时删除分类).
所以基本上,当有人想要删除分类时,他们点击分类,点击删除按钮,然后输入通行证.
我使用MySql作为数据库.
我基本上使用这个代码:
if ($pass==$row['poster_password'])
Run Code Online (Sandbox Code Playgroud)
从MySql获取行[poster_password] ...
你怎么看?谢谢
在阅读了有关盐密码散列的内容后,我想为管理区域实现一个简单的版本,以便建立一个网站.
如果你有很好的链接代码已经很好地实现了这个想法,如果你能分享,我将不胜感激.
谢谢,
什么是PHP的Md5算法的最佳替代方案,用于加密存储在MySQL数据库中的密码和其他安全数据等用户数据?
我一直在尝试为我正在开发的网站进行安全登录.
我只是不能让它工作,我使用MySQL的MySQL数据库.
我可以使表单将用户及其信息添加到数据库,但我似乎无法使其与登录一起工作.
HTML使用什么类型的加密<input type="password">?
如何在用户访问我的网站时保持用户登录?
我如何安全地检查它是否是与用户名匹配的正确密码?
我已经做了PHP一年了,我还没学会这个部分,所以很高兴知道.
几年后,我在stackoverflow上询问了如何使PHP密码存储安全.在主要答复建议使用以下哈希算法:
function hash_password($password, $nonce) {
global $site_key;
return hash_hmac('sha512', $password . $nonce, $site_key);
}
Run Code Online (Sandbox Code Playgroud)
答案建议使用随机的随机数.有一个随机的随机数比简单的独特的随机数有什么优势吗?
例如,每个用户可以拥有自己的ID,但不会改变.但是,我们假设用户ID是顺序的(使用MySQL的自动增量功能构建),因此不是随机的.用户ID是一个好的nonce还是随机性很重要?
现在,每个用户都可以选择用户名.每个用户都有自己的用户名,该用户名不会更改,两个不同的用户不能拥有相同的用户名.用户名仍然不是随机的,但它们也不是顺序的.用户名是否足够好作为nonce?它会比使用用户ID更好吗?
我正在开发一个网站,我正在努力保护连接部分.
我使用addslashes函数$login来停止SQL注入,但有些朋友告诉我安全性不够.但是,他们没有告诉我如何利用此漏洞.
我怎么能/你能破坏这段代码?我该如何保护它?
<?php
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{
extract($_POST);
$sql = "SELECT pseudo, sex, city, pwd FROM auth WHERE pseudo = '".addslashes($login)."'";
$req = mysql_query($sql) or die('Erreur SQL');
if (mysql_num_rows($req) > 0)
{
$data = mysql_fetch_assoc($req);
if ($password == $data['pwd'])
{
$loginOK = true;
}
}
}
?>
Run Code Online (Sandbox Code Playgroud) 可能重复:
PHP密码的安全散列和盐
我看到有人编码这样的密码哈希,
md5(uniqid(mt_rand('password', 15), true));
Run Code Online (Sandbox Code Playgroud)
这是一种安全的方式吗?甚至是成功了吗?
我一直在研究如何正确地散列/加密密码并将其存储在数据库中.我知道Salt和Hashing所以我环顾四周,PBKDF2似乎是一个不错的选择.所以我发现这个网站提供了一个很好的教程,以及适用于PHP的PBKDF2(这是我用于我的网站).
所以我设置我的网站使用这些函数来生成/创建密码,但正如您在以下代码中看到的那样:
Run Code Online (Sandbox Code Playgroud)function create_hash($password) { // format: algorithm:iterations:salt:hash $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTES, MCRYPT_DEV_URANDOM)); return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" . $salt . ":" . base64_encode(pbkdf2( PBKDF2_HASH_ALGORITHM, $password, $salt, PBKDF2_ITERATIONS, PBKDF2_HASH_BYTES, true )); }
salt在create_hash函数中生成,并存储在生成的哈希中,最终看起来像sha256:1000:salt:hashed_password.这是我必须存储在我的数据库中,并且由于salt包含在生成的哈希中,我不需要将它添加到我的数据库中.但是,在用这个生成一些测试用户之后,我想知道在数据库中使用哈希密码进行PBKDF2设置实际上是一件好事.他们的方式我的新手自己看到它是一个黑客,破解我的数据库后,会看到这些sha256:1000:盐:密码的东西,并弄清楚每个部分将代表什么,这将有助于他在他的尝试,不?
所以我修改了一下我生成并存储在我的数据库中的外部盐,并在通过PBKDF2运行之前在密码中包含salt.然后我做同样的事情来比较给定的密码和我在我的数据库中用于登录,它的工作原理.我唯一担心的是,使用128位盐,生成的密码哈希长度只有50个字符,这对我来说似乎不对.
这是我目前的代码:
define("PBKDF2_HASH_ALGORITHM", "sha256");
define("PBKDF2_ITERATIONS", 10000);
define("PBKDF2_SALT_BYTES", 128);
define("PBKDF2_HASH_BYTES", 24);
define("HASH_SECTIONS", 4);
define("HASH_ALGORITHM_INDEX", 0);
define("HASH_ITERATION_INDEX", 1);
define("HASH_SALT_INDEX", 2);
define("HASH_PBKDF2_INDEX", 3);
function create_hash($password, $salt)
{
// format: salthash
return
base64_encode(pbkdf2(
PBKDF2_HASH_ALGORITHM,
$password,
$salt,
PBKDF2_ITERATIONS,
PBKDF2_HASH_BYTES,
true
));
}
function validate_password($password, $salt, $good_hash)
{
$pbkdf2 …Run Code Online (Sandbox Code Playgroud) 我通常非常有资源自己寻找信息,但是当谈到这个问题时,那里的东西确实令人生畏.我收到了一些信息超载.
我已经找到了几十篇关于个人安全主题的文章,但我无法理解大局以及它们在实践中如何融合在一起.
我需要看一个鸟瞰路线图.拿这个假设的例子:
一个简单的假设"评论"部分:
注册:创建一个密码/用户名组合,安全地存储在MySQL表中.
登录.
发表评论.
这个最基本的案例将遵循什么是"安全路线图"?
这个星球上的每本教程和PHP书都使用MySQL扩展没有帮助,如果我理解正确的话,这是一个坏主意吗?