我对密码安全有所了解。
当一个网站生成时,它将创建所有键盘字符的2个随机副本,一个随机长度的盐。此外,它将为盐创建随机偏移数。
实施例
$password = "Password";
$offset = 3;
$salt = "f00";
$saltedPw = "Pasf00sword";
$setOne = 'ftwgDtrE354.....';
$setTwo = '$5grFIPV9@.....';
$pw = encryptFunc($saltedPw, $setOne);
$pw = encryptFunc($pw, $setTwo);
salt,offset,setOne和setTwo将存储在php文件中,这意味着如果数据库遭到入侵和/或被盗,密码将无法轻易解密。
这听起来像是保护密码的一种相当强大的方法吗?如果没有问题呢?
答案 0 :(得分:4)
只需存储您的密码哈希值,每个用户使用一个唯一的盐。不要试图发明自己的安全模型。
您真的需要能够解密用户密码。
答案 1 :(得分:4)
这是混淆的一个很好的例子,而不是真正的安全性。你只是添加了更多的步骤来掩盖这个秘密,你并没有让它本身安全。如果有人知道你正在采取的步骤,你的“安全”就会消失。由于您依赖于秘密,因此您的安全性与保护秘密的安全性一样强大。如果秘密是一个密钥,两个密钥,或一百个密钥和一个简单的算法无关紧要。如果您的服务器遭到入侵并且您的加密密码被盗,那么您的秘密也可能是攻击者可以接触到的。
使用的正确技巧是散列密码,使其不可加密哈希的不可逆性。即使你也无法获得原始密码。 猜测密码的唯一方法是强制它,这会将安全性转移到技术可行性。您可以通过使用随机盐对每个密码进行盐析来强制您的密码变得更不可行,这会阻止大规模预先计算(彩虹表)。
您是否看到了方法上的差异? :)