好的,我的回答是关于密码保护(php users passwords protection)和我的最终代码:
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,注册日期,只需要一切。但是在管理面板中我想要检索那些信息,所以这意味着我需要自己编写
是否可以从此脚本/函数创建解密脚本/函数?
答案 0 :(得分:8)
否即可。 SHA-1和其他散列函数的目标只是单向。如果您甚至可以稍微加快将哈希解码为原始值的过程,则哈希函数机制将被视为已破坏,并且许多人可能会辞职而不使用该算法。
使用散列函数的原因只是因为你可以用它来检查你是否编码了相同的值(如果你编码$value1
并得到一些哈希值,结果,然后你编码$value2
并得到相同的哈希结果,你可以肯定 - 几乎 100%肯定 - $value1
等于$value2
) 。 它们只是为了使非常困难(几乎不可能)将哈希解码为输入变量。
...然而
有尝试和可能性来了解输入变量,但它们基于Rainbow Tables的概念。 彩虹表是一个由输入变量对和生成的哈希组成的表。它们是预编译的并且大小很大,但它们允许您查找某些哈希值的输入值。
这就是为什么 salt 被引入的原因。 Salt用于进一步使输入变量复杂化,使彩虹表成为不太可靠的解决方案。例如,如果您为字符串MD5
生成带'home'
的哈希值,则会获得106a6c241b8797f52e1e77317b96a201
哈希值,您可能可以使用Internet上的某些公共彩虹表服务对其进行解码。但是如果你添加一些盐(例如一些换行符号,一些非打印字符等),你可能会发现任何彩虹表允许你解码散列(甚至是这么简短的单词的散列)非常低。
使用盐还有一个额外的原因。原因如下。如果你使用盐,例如。对于您的身份验证机制,所有值都附加了此salt。对于攻击者来说,这意味着他必须确定创建一些给定哈希的值,并且此值必须包含您在系统中使用的盐(哈希函数本身能够从两个不同的哈希创建一些哈希值)值),然后提取原始输入值(您附加到盐值然后散列的值)以使其可用。所以问题进一步复杂化了。
我希望这澄清了散列算法和盐的概念。
答案 1 :(得分:0)
答案 2 :(得分:0)
SHA1哈希是不可逆的,因为它是通过计算完成的。 你不能用盐解码它。
答案 3 :(得分:0)
有许多双向加密解决方案。一个特别好的(有解释)是这个帖子上接受的答案:
Two-way encryption: I need to store passwords that can be retrieved