我正在尝试为网站添加一小部分安全性并对某些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;
}
答案 0 :(得分:5)
我觉得你对这个问题有点困惑。
碰撞问题仅适用于不 1对1,但是“有损”的映射,即将几个不同的输入映射到一个输出(例如散列)。
您链接的内容看起来像加密/解密例程(如果它正常工作,我没有检查)。根据定义加密意味着存在匹配的解密,因此加密定义的映射不能发生冲突(因为在这种情况下您无法解密)。
所以你提出的问题没有意义。
那就是说,我强烈建议你不要使用像加密ID那样的绑带。只需存储ID服务器端并生成会话密钥以引用它们。