可以执行此 *** 作,但是我建议使用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
+,请
/使用
-和替换
_。
注意:尽管这可行,但对于像您这样的简单方案,创建随机文件名可能会更容易,直到它不存在为止。没有人关心条目的编号。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)