自定义sha1 +盐通解码

Zer*_*f3r 1 php security function

好的,我的回答是关于密码保护(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;
}
Run Code Online (Sandbox Code Playgroud)

让我们说最强大的安全性,我想加密IP,注册日期,只需要一切.但是在管理面板中,我想要检索该信息,这意味着我需要对其进行描述

是否可以从此脚本/函数创建解密脚本/函数?

Tad*_*eck 8

.SHA-1和其他散列函数的目标只是单向.如果您甚至可以稍微加快将哈希解码为原始值的过程,则哈希函数机制将被视为已损坏,并且许多人可能会辞职使用该算法.

使用散列函数的原因只是因为您可以使用它们来检查您是否编码了相同的值(如果您编码$value1并得到一些哈希作为结果,然后您编码$value2并得到相同的哈希结果,您可以确定 - 几乎 100%肯定 - $value1等于$value2).它们的设计只是为了将哈希解码为输入变量非常困难(实际上是不可能的).

然而...

有尝试和可能性来了解输入变量,但它们基于Rainbow Tables的概念.彩虹表是由具有生成的散列的输入变量对组成的表.它们是预编译的并且大小很大,但它们允许您查找某些哈希值的输入值.

这就是为什么被引入.Salt用于进一步使输入变量复杂化,使彩虹表成为不太可靠的解决方案.例如,如果您使用MD5for string 生成散列'home',您将获得106a6c241b8797f52e1e77317b96a201散列,并且您可能能够使用Internet上的某些公共彩虹表服务对其进行解码.但是如果你添加一些盐(例如一些换行符号,一些非打印字符等),你可能会发现任何彩虹表允许你解码散列(甚至是这么简短的单词的散列)非常低.

使用盐还有一个额外的原因.原因如下.如果你使用盐,例如.对于您的身份验证机制,所有值都附加了此salt.对于攻击者来说,这意味着他必须确定创建一些给定哈希的值,并且该值必须包含您在系统中使用的盐(哈希函数本身能够从两个不同的值创建一些哈希),然后提取原始输入值(您附加到盐值然后散列的值)使其可用.所以问题进一步复杂化.

我希望这澄清了散列算法和盐的概念.