当用户注册时,我应该按原样将他们的电子邮件存储在数据库中还是哈希。 我希望以后可以解密它,所以我应该使用md5吗?
谢谢你!答案 0 :(得分:16)
不,md5()
- 是one-way hash function。你不能解密它的价值。通常用于不需要解密的密码。相反,你比较哈希:
$salt = "adding some secret to increasse security";
if (md5($user_password . $salt) == $user_password_hash_from_db) {
## password is ok
}
如果您希望能够解密您的值,请改用crypt
php函数。但它可能需要安装其他模块。
任何方式我都没有看到加密电子邮件的任何实际理由。
答案 1 :(得分:3)
加密电子邮件地址并不常见。如果有人真的想要将他们的电子邮件保密,他们首先不会将其发送到您的网站:)
答案 2 :(得分:1)
MD5是一个哈希值,这使得几乎无法获得原始值。如果您想要收回电子邮件,则应使用加密而不是哈希。
答案 3 :(得分:1)
我同意电子邮件是一个(次要的)信息安全问题,因为如果有人访问您的数据库,那么这就成了您向世界传播的个人信息,但您会想要双向加密/正如Ivan所说,解密方法能够将电子邮件撤回。
请注意,基本的MD5哈希不再是安全哈希。
维基百科以许多不同的方式说,不再安全(http://en.wikipedia.org/wiki/MD5):
US-CERT美国美国商务部 国土安全部称MD5“应该是 考虑加密破坏 并且不适合进一步使用,“[7] 和大多数美国政府的申请 将被要求转移到SHA-2 哈希函数系列到2010年。[8]
我认为它的一个主要问题是这些天都有md5哈希的彩虹表,所以裸md5很容易受到暴力破坏。
将它视为一种有用的工具,用于轻微的遮蔽和消毒复杂的数据集,但它不再是一个真正安全的哈希。可能会有一些特殊的箍,你可以跳过,比如使用salt和执行嵌套的md5哈希以使其更安全,尽管我不是密码学家。您可能希望查看其他SO线程,例如this,以获得良好的整体加密解决方案。
答案 4 :(得分:0)
当您使用md5时,您将无法解密它。 md5是一个one-way - 哈希函数。
答案 5 :(得分:0)
md5不是加密方法,它是单向散列。没有理由加密数据库中的电子邮件地址。我会原样离开它们。
答案 6 :(得分:0)
如果您打算稍后解密,MD5将不是一个选项,因为只有哈希字符串,您将丢失原始数据。
我建议您尝试一些内置的PHP加密函数。
答案 7 :(得分:0)
其他答案都说明了。
然而,正如Ivan的回复所指出的那样, 总是加密哈希密码至少包含md5()和salt。< / p>