是否有可能從規模到https://stackoverflow.com/a/9848014/2704706編碼採取了以下功能/解碼的號碼變成11字符串?生成的YouTube式的標識與PHP
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_encode($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_decode($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";
}
我的最終目標是使用這些方法,形成具有編碼ID的網址,以類似的方式向包括在YouTube的URL中的V $ _ GET變量,即RArlg6HeZZM在http://www.youtube.com/watch?v=RArlg6HeZZM視頻的ID。
提前致謝。
使用散列算法有利於「減少」的字符串的東西小;但是你會想用查找來「走另一條路」。 – Floris
我實際上喜歡使用類似於我上面包含的編碼算法而不是哈希算法,這樣我就可以將ID解碼回原始數字表示。 –
您可以使用PHP中的任何加密函數,首先將序列號轉換爲適當長的字符串。 base-64的11個字符大概是64位,或八個字節,這是一個方便的加密塊。 – rici