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

ped*_*ete 1 encryption hash

我正在尝试为站点添加一小部分安全性并对某些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;
}
Run Code Online (Sandbox Code Playgroud)

sle*_*ske 5

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

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

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

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

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

  • @ForerMedia:Sha1'd唯一的部分是加密盐的关键.我已经尝试过加密/解密,它确实可以处理我尝试过的部分. (2认同)