PHP - 我应该加密电子邮件地址吗?

9
当用户注册时,我应该将他们的电子邮件存储在数据库中还是进行哈希处理。由于我希望能够稍后解密它,所以我应该使用md5吗?
谢谢!

6
散列(或多或少)可以防止解密。因此,你肯定不希望这样做。 - Quentin
1
我讨厌人们像这样对一个问题进行负面投票。他并没有给出错误的建议,他只是在问一个他想澄清的概念问题。我把你的票数投回0。 - Faisal Abid
你应该对所有的电子邮件进行哈希处理,并保留一个单独的表格,其中包含键值对,这样你就可以反向哈希后解密! 附:只是开个玩笑(程序员幽默)。 - Frankie
8个回答

16

不,md5()单向哈希函数。你无法解密它的值。通常用于不需要解密的密码。相反,你可以比较哈希值,例如:

$salt = "adding some secret to increasse security";
if (md5($user_password . $salt) == $user_password_hash_from_db) {
    ## password is ok
}

如果您想解密您的值,那么请使用crypt php函数。但这可能需要安装其他模块。
无论如何,我看不到加密电子邮件的实际原因。

2
当然,使用加盐哈希存储密码是一个好主意。 - tosh
1
是的,假装每个人和他们的母亲都知道“md5('password')== '5f4dcc3b5aa765d61d8327deb882cf99'”,因为所有重要的黑客都会知道。 - Kzqai
2
如果你想要解密你的值,那么请使用crypt。但这是错误的,如果你真的去阅读PHP手册,你会发现它是一个哈希函数。http://php.net/manual/en/function.crypt.php - The Pixel Developer

3

加密电子邮件地址并不常见。如果有人真的想保护他们的电子邮件隐私,他们不会首先将其提供给您的网站 :)


1
现代的垃圾邮件方案有所不同。电子邮件列表代表着隐私的价值。与密码相比,这个价值很小,但确实存在,因此加密方法是有益的,但对于电子邮件来说,它肯定需要一种可逆的方法。 - Kzqai

1

MD5是一种哈希算法,使得几乎不可能恢复原始值。如果您想要获取电子邮件,请使用加密而不是哈希。


1

我同意电子邮件是(轻微的)信息安全问题,因为如果有人访问了你的数据库,那么这些电子邮件就成为了你泄露出去的个人信息,但是正如Ivan所提到的,你需要一种双向加密/解密方法来能够取回这些电子邮件。

请注意,基本的MD5哈希已经不再是安全哈希。

正如维基百科以多种不同的方式所说,已经不再安全(http://en.wikipedia.org/wiki/MD5):

美国国土安全部的US-CERT表示,MD5“应被视为密码学上破解和不适合进一步使用”,大多数美国政府应用程序将在2010年前转向SHA-2哈希函数家族。[8]

我认为它的一个主要问题是现在有很多MD5哈希的彩虹表,所以裸的MD5非常容易受到暴力破解的攻击。

将其视为一种有用的工具,可用于对复杂数据集进行轻微混淆和清理,但它不再是真正安全的哈希。可能有一些特殊的技巧可以跳过,比如同时使用盐和执行嵌套的MD5哈希来使其更安全,但我不是密码学家。您可能需要查看其他SO线程,例如this一个,以获取良好的整体加密解决方案。


1
MD5从来都不是“安全加密”;作为哈希算法,它已经不再那么安全了。 - Jonathan Leffler
对不起,我没有使用精确的术语。已进行编辑并标记为 CW。 - Kzqai

0

当你使用md5时,你将无法解密它。md5是一个单向哈希函数(one-way)


0

MD5不是加密方法,而是单向哈希。在数据库中没有必要加密电子邮件地址。我会将它们保留原样。


0
如果您打算稍后解密它们,MD5 将不是一个选项,因为它只会对字符串进行哈希处理,您将失去原始数据。
我建议您尝试一些内置的 PHP 加密函数。

0

其他答案都已经说明了这个问题。

然而,正如Ivan在他的回复中所指出的那样,您应该始终使用至少md5()和盐值对密码进行哈希处理,而不是加密


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接