如何设计顺序的类似哈希的函数

如何设计顺序的类似哈希的函数,第1张

如何设计顺序的类似哈希的函数

可以执行 *** 作,但是我建议使用64个字符,因为这样会使 *** 作变得更加容易。4个6位字符= 24位。

结合使用以下各项:

  • 位重新排序
  • 与数字异或
  • 将其放入24位最大长度的LFSR中,并执行几个循环。

强烈建议使用LFSR,因为它可以很好地加扰。其余的是可选的。所有这些 *** 作都是 可逆的, 并确保每个输出都是 唯一的

计算“改组后的”数字时,只需将其打包为二进制字符串并使用进行编码

base64_enpre

对于解码,只需执行这些 *** 作的逆 *** 作即可。

样本(2 ^ 24长的唯一序列):

function lfsr($x) {    return ($x >> 1) ^ (($x&1) ? 0xe10000 : 0);}function to_4($x) {    for($i=0;$i<24;$i++)        $x = lfsr($x);    $str = pack("CCC", $x >> 16, ($x >> 8) & 0xff, $x & 0xff);    return base64_enpre($str);}function rev_lfsr($x) {    $bit = $x & 0x800000;    $x = $x ^ ($bit ? 0xe10000 : 0);    return ($x << 1) + ($bit ? 1 : 0);}function from_4($str) {    $str = base64_depre($str);    $x = unpack("C*", $str);    $x = $x[1]*65536 + $x[2] * 256 + $x[3];    for($i=0;$i<24;$i++)        $x = rev_lfsr($x);    return $x;}for($i=0; $i<256; $i++) {    $enc = to_4($i);    echo $enc . " " . from_4($enc) . "n";}

输出:

AAAA 0kgQB 15ggD 2dAwC 3DhAH 4nBQG 56BgE 6ehwF 7HCAO 8jiQP 9+igN 10aCwM 11EjAJ 12gDQI 139DgK 14ZjwL 15OEAc 16qkQd 173kgf 18TEwe 19NlAb 20pFQa 210FgY 22...

注意:对于URL

+
,请
/
使用
-
和替换
_

注意:尽管这可行,但对于像您这样的简单方案,创建随机文件名可能会更容易,直到它不存在为止。没有人关心条目的编号。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5051658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存