how to implement sha 512,md5 and salt encryption all for one password
本问题已经有最佳答案,请猛点这里访问。
1 | $pass="test" |
上面的变量包含一个名为test的密码。我想用sha512 md5和salt散列这个密码。我该怎么做呢?因为我只找到salt和sha512的好处,我已经知道md5加密。请我需要解决方案,因为我的系统是Vunable。
请用一个代码示例来解释它,因为我仍然连接到MD5
根据我对你的评论和回答的理解,我得到了以下代码
1 2 | $pass="test"; $hashed_pass= openssl_digest($pass, 'sha512'); |
好的,看起来足够坚固,但是[盐='']是什么?它是否会生成一个随机的salt字符串,如果是,如何实现它?
编辑:由于这个答案似乎仍然产生了一些兴趣,让我带领大家走向
如果您已经在使用
使用
哈希新密码:
1 2 3 4 5 6 7 8 | // generate a 16-character salt string $salt=substr(str_replace('+','.',base64_encode(md5(mt_rand(), true))),0,16); // how many times the string will be hashed $rounds = 10000; // pass in the password, the number of rounds, and the salt // $5$ specifies SHA256-CRYPT, use $6$ if you really want SHA512 echo crypt('password123', sprintf('$5$rounds=%d$%s$', $rounds, $salt)); // output: $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8 |
比较现有密码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // the hash stored for the user $given_hash = '$5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8'; $test_pw = 'password123'; // extract the hashing method, number of rounds, and salt from the stored hash // and hash the password string accordingly $parts = explode('$', $given_hash); $test_hash = crypt($test_pw, sprintf('$%s$%s$%s$', $parts[1], $parts[2], $parts[3])); // compare echo $given_hash ." " . $test_hash ." " . var_export($given_hash === $test_hash, true); /* output: $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8 $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8 true */ |
如果您使用的是php>=5.3,那么函数openssl_digest应该做到这一点:
1 2 3 4 5 6 7 | echo openssl_digest($pass, 'sha512'); // result ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff echo md5($pass); // result 098f6bcd4621d373cade4e832627b4f6 |
对于php 5.1或5.2,您有散列函数:
1 2 3 4 5 6 |