我得到了一个我在大约2年前写过的函数。该函数使用base64编码方法以及sha1哈希和一堆预定义值。这是函数
function secure_encode($x) {
return strtr(base64_encode(substr($_SESSION['Cksum'],rand(0,28),4) . $x), '+/=', '-_+');
}
$express = array();
$express['0'] = "58464db46ba2ea0f54.8030317175114db46ba2ea1004.65676456123564db46ba2ea10b2.4389053856-5caecd9b6220eaea81e40641caad165ad681d49c-Bh8j1kU.kAIznsh5WhHH-XO5FJFGU6cMySblUAKkpdg==/".date();
$express['1'] = "113354db46791181958.25326465113804db46791181a07.35447338301094db46791181ab9.28188138-c5438adfef452a06fffd8a1e755322796122620d-O1dnRG.KafUv8.JcISrn-Nhab7EDL.2lkQ68WfT1Pzg==/";
$express['2'] = "299084db46ac385b7d9.3958582716614db46ac385ba68.3911624024184db46ac385bee5.3681503764-b249050b2cc8ec9a9a24e6775fd6d679982ce35e-E7rS6jrbjYdHptZPAe4v-WNwjOR1HEEMJURn/RUN.AA==/";
$express['3'] = "233534db46ae7c7a2d7.98941083259824db46ae7c7a390.88346488191674db46ae7c7a449.03466538-08741422c3f59599e4c170ed4871e387a921268f-L/pA2jYJ/mEjZmyjHWt5-fVSwQyCRfxsR8lCmQkw2aw==/";
$express['4'] = "107034db46b02569962.3398546439324db46b02569a26.08097334169974db46b02569ad1.521504520-e141a88ba3299debc3abc9a04d5953a7604df28e-JGkKsXa19ZEPuasSZLC5-B8oD3S68DPUL3zrZTjELZg==/";
$pass = $_POST['auth_pass'];
$hash = secure_encode((sha1($express['0']."//!%$!*&^@n3.".$pass).sha1($express['2']."//!%$!*&^@n3.".$pass)));
例如散列值: 123abc 将返回
NjY1NGI0ZTIzMTc5NmViNGU5MjhiMDgyZmUyMDYwNDAzYWQzM2NjYTJmZTYzYjk2ZTg3MzVkMTRmMTc2MjI0NjdkMjY2ZDg0MjAyMGY1ZTc +
根据代码片段,这个散列是否足以散列基本用户数据,如名字/姓氏,电话号码,地址和D.O.B,还是更好地使用其他形式的哈希?此外,如果可以改进代码段,请指出可以使其更好的部分。
编辑:我目前使用此功能在我制作的论坛软件上哈希用户密码。我从未遇到任何用户帐户遭到破坏或密码被盗的问题。
答案 0 :(得分:6)
你所做的是通过默默无闻来称为安全。仅仅因为某人不知道您的算法并不能确保其安全。如果有人闯入你的网站并查看你的散列函数,那么你的“自定义”哈希很容易被攻击,因为你所做的只是base64编码一个salted SHA1哈希。
不要编写自己的功能。使用可信的哈希函数,如Bcrypt,攻击费用很高。
另外,请务必阅读this article以获得更深入的解释。