这比普通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) 据我了解,生成盐的最佳做法是使用源代码中存储的一些神秘公式(甚至魔术常量).
我正在研究一个我们打算作为开源发布的项目,但问题是源代码是生成盐的秘密公式,因此能够在我们的网站上运行彩虹表攻击.
我认为很多人在我面前都考虑过这个问题,我想知道最佳做法是什么.在我看来,如果代码是开源的话,根本就没有盐,因为盐可以很容易地进行逆向工程.
思考?
关于https://gist.github.com/shadowhand/873637状态的评论
“ ECB模式加密是一种相对简单的加密方法,它提供了高级别的混淆(或低级别的加密)。这种方法不是很安全,不应该用于敏感的个人数据,但是可以很好地用于例如。在公共通道之间的私人团体之间传输源代码。为了提高安全性,您可以将模式切换为CBC,但要以每次修改完全更改每个文件为代价。与所有加密一样,始终建议使用强密钥。”
和
“这是功能正确加密的定义的一部分(ECB(单击此处以获取解释)),这是有缺陷的传统实现,恰恰是今天没有人推荐使用的,并且仅在OpenSSL中受支持,因为OpenSSL支持一些非常老旧的协议。令人毛骨悚然的旧式加密实现!仅在今天作为学习工具才有用,切勿在当前系统中使用。
OFB模式的CBC应该是默认值-请考虑更改使用CBC的要旨,并为那些希望接受安全性损失以方便git的人解释ECB的潜在好处以及缺点。默认情况下,没有什么不安全的!”
http://git.661346.n2.nabble.com/Transparently-encrypt-repository-contents-with-GPG-td2470145.html但是指出,对CBC使用定值盐是不好的加密实践。如果我们将模式切换为CBC(对于https://gist.github.com/shadowhand/873637或https://github.com/shadowhand/git-encrypt),它将使用固定值的盐,因此是不好的加密实践吗?
(我还将这个问题作为评论发布在https://gist.github.com/shadowhand/873637上)
encryption ×2
salt ×2
security ×2
cbc-mode ×1
cryptography ×1
git ×1
gnupg ×1
open-source ×1
passwords ×1
php ×1
rainbowtable ×1