Hash Collision在相当简单的加密/解密代码中

时间:2009-07-16 14:04:06

标签: hash encryption

我正在尝试为网站添加一小部分安全性并对某些ID进行编码。 id已经是链表行的连续,因此在db中存储加密效率不高。因此我需要编码&解码字符串。

我从myphpscripts找到了这个很棒的小功能,我想知道碰撞的可能性是什么。

我真的不太了解这些事情。我假设我的钥匙越久,碰撞的碰撞就越少。

我最终可能拥有超过1000万个独特的连接ID,并且希望确保我不会遇到问题。

function encode($string,$key) {
    $key = sha1($key);
    $strLen = strlen($string);
    $keyLen = strlen($key);
    $j=0;
    $hash='';
    for ($i = 0; $i < $strLen; $i++) {
        $ordStr = ord(substr($string,$i,1));
        if ($j == $keyLen) { $j = 0; }
        $ordKey = ord(substr($key,$j,1));
        $j++;
        $hash .= strrev(base_convert(dechex($ordStr + $ordKey),16,36));
    }
    return $hash;
}

1 个答案:

答案 0 :(得分:5)

我觉得你对这个问题有点困惑。

碰撞问题仅适用于 1对1,但是“有损”的映射,即将几个不同的输入映射到一个输出(例如散列)。

您链接的内容看起来像加密/解密例程(如果它正常工作,我没有检查)。根据定义加密意味着存在匹配的解密,因此加密定义的映射不能发生冲突(因为在这种情况下您无法解密)。

所以你提出的问题没有意义。

那就是说,我强烈建议你不要使用像加密ID那样的绑带。只需存储ID服务器端并生成会话密钥以引用它们。