问题描述
|
好的,我的答案是关于密码保护(php用户密码保护)和我的最终代码的:
function sha1_custom($string) {
$salt = sha1(\"1\".$string.\"1\");
//In final code 1 replaced with others chars
$string = sha1(\"$salt$string$salt\");
return $string;
}
假设要获得最强的安全性,我想加密IP,注册日期以及所有内容。但是在管理面板中,我想检索该信息,所以这意味着我需要对其进行抄写
是否可以通过此脚本/功能创建解密脚本/功能?
解决方法
不能。SHA-1和其他哈希函数的目标仅是单向的。如果您甚至可以稍微加快将哈希解码为原始值的过程,则哈希函数机制将被视为已损坏,许多人可能会放弃使用该算法。
使用哈希函数的原因仅仅是因为您可以使用它们来检查是否对相同的值进行了编码(如果您对
$value1
进行编码并得到一些哈希值,然后对$value2
进行编码并得到了相同的哈希值,那么您可以确定-几乎100%确定-$value1
等于$value2
)。它们只是为了使将哈希解码为输入变量变得极其困难(实际上是不可能的)。
然而...
有尝试和可能性来了解输入变量,但是它们基于Rainbow Tables的概念。 Rainbow表是由具有生成的哈希的输入变量对组成的表。它们是预编译的,并且很大,但是它们使您可以查找某些散列的输入值。
这就是为什么引入盐的原因。 Salt用于进一步使输入变量复杂化,从而使Rainbow表成为较不可靠的解决方案。例如,如果您为字符串ѭ6with用MD5
生成哈希,则将获得106a6c241b8797f52e1e77317b96a201
哈希,并且您也许可以使用Internet上的一些公共Rainbow表服务对其进行解码。但是,如果您添加一些盐(例如,某些换行符,一些非打印字符等),则可能会找到任何彩虹表,使您可以解码哈希(甚至是一个简短单词的哈希)极低。
还有一个使用盐的其他原因。原因如下。如果您使用盐,例如。对于您的身份验证机制,所有值都与此盐一起附加。对于攻击者而言,这意味着他必须确定创建某个给定哈希的值,并且该值必须包含您在系统内使用的盐(哈希函数本身能够从两个不同的值创建哈希),然后提取原始输入值(先附加到盐值上然后进行哈希处理的输入值)以使其可用。因此,问题进一步复杂化。
我希望这可以澄清哈希算法和盐的概念。
,简短答案:不。
像md5
一样的sha1
以及所有其他哈希函数都仅是one-way
。
如果您需要crypt-decrypt,则需要一个密钥,并将其用于以下函数中:mcrypt
,SHA1哈希是不可逆的,因为它是通过计算完成的。
无论是否加盐,您都无法解码。