Php 在数据库中插入密码,与常规文本字段有什么区别?
我正在做一个注册表,我唯一的疑问是如何处理密码(如何将密码插入MySQL数据库)。我一点也不知道该怎么做,密码必须是什么类型的列,我是否必须以某种方式对它们进行加密,等等。你能提供一个基本的例子来解释一下,这样我就能做到吗?可以做到的一个方法是使用md5。您将密码转换为md5并将其放入数据库(md5加密是单向的)当用户再次登录时,您将再次转换填写的密码,并检查转换后的密码是否存在于您的数据库中(通常与用户名结合使用) 编辑 您可以使用以下命令将字符串转换为md5字符串:Php 在数据库中插入密码,与常规文本字段有什么区别?,php,mysql,passwords,Php,Mysql,Passwords,我正在做一个注册表,我唯一的疑问是如何处理密码(如何将密码插入MySQL数据库)。我一点也不知道该怎么做,密码必须是什么类型的列,我是否必须以某种方式对它们进行加密,等等。你能提供一个基本的例子来解释一下,这样我就能做到吗?可以做到的一个方法是使用md5。您将密码转换为md5并将其放入数据库(md5加密是单向的)当用户再次登录时,您将再次转换填写的密码,并检查转换后的密码是否存在于您的数据库中(通常与用户名结合使用) 编辑 您可以使用以下命令将字符串转换为md5字符串: $converted_p
$converted_pass = md5($unconverted_pass);
但是,在使用md5加密密码之前,需要向密码中添加一个所谓的salt密钥。这是一组字母/数字等。如果您每次都这样做,您将得到相同的结果,但会非常安全:)您不应该存储密码,只存储密码哈希。 应在选择hasfunction之后选择数据库类型。
对于
md5
/sha512
,如果保留十六进制表示,则为char(32)
查询是这样的:
"INSERT INTO users SET otherFields,pass_hash='".hashFunc($_POST['password']."';
其中hashFunc生成hash ex
function hashFunc($pass){
$salt='something';
md5($salt . $pass);
}
请阅读以下内容:
然后执行此操作:安全保护密码的唯一方法是使用摩尔定律破坏哈希函数。使用 您不希望以明文形式存储密码。你甚至不想知道密码是什么。因此,在数据库中存储密码的哈希。当用户想要登录时,您对他尝试登录时使用的密码进行散列,然后将其与数据库中的散列进行比较。任何严重的密码存储系统都会进一步盐化散列,以防止对密码的彩虹表攻击(googlethat)。因为这是一个相当复杂的主题,而且您显然根本没有使用它的经验,所以我建议您使用hash和salt密码,而不必担心实现细节。phpass站点也有一些关于这个主题的很好的介绍性文章。这使它非常简单
至于数据库,这只是一个正常的
VARCHAR
字段,足够长,可以容纳哈希。char\VARCHAR,应该进行哈希和盐析。如果不盐析,还可以存储为纯文本,这是真的。抱歉,忘记了=(你确实需要给它加盐。虽然这不是最好的答案,但它不值得投反对票。+1如果明文存储密码就像把门敞开着一样,MD5就像把门关上。它看起来很安全,直到小偷打开为止。停止推荐MD5。使用bcrypt。