我給你一個答案與自願省略gmp_strval(gmp_init(strtoupper($hash32), 32), 16);
這僅作品與GMP安裝在您的服務器。
function convBase($numberInput, $fromBaseInput, $toBaseInput)
{
if ($fromBaseInput==$toBaseInput) return $numberInput;
$fromBase = str_split($fromBaseInput,1);
$toBase = str_split($toBaseInput,1);
$number = str_split($numberInput,1);
$fromLen=strlen($fromBaseInput);
$toLen=strlen($toBaseInput);
$numberLen=strlen($numberInput);
$retval='';
if ($toBaseInput == '')
{
$retval=0;
for ($i = 1;$i <= $numberLen; $i++)
$retval = bcadd($retval, bcmul(array_search($number[$i-1], $fromBase),bcpow($fromLen,$numberLen-$i)));
return $retval;
}
if ($fromBaseInput != '')
$base10=convBase($numberInput, $fromBaseInput, '');
else
$base10 = $numberInput;
if ($base10<strlen($toBaseInput))
return $toBase[$base10];
while($base10 != '0')
{
$retval = $toBase[bcmod($base10,$toLen)].$retval;
$base10 = bcdiv($base10,$toLen,0);
}
return $retval;
}
此功能,發現here,「從任何鹼的任何鹼轉換任意大量的」。 你只需要轉換從基地32到基地16,因此:
base 32 alphabet是:ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
$hash32='IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ';
$hash16=convBase($hash32, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', 'ABCDEF');
//$hash16='45C9A56D2C13E99B4EDBC43397203DB8FCACA090'
的這裏的問題是,base_convert
誤操作大量涌現。
那麼,你爲什麼哈希呢? – 2012-07-27 06:03:38
你是什麼意思的有效信息哈希? – varuog 2012-07-27 06:15:20
Bittorrent的info_hash是sha1哈希,而不是base32。你確定你做了正確的轉換嗎? – Timur 2012-07-27 09:03:54