Хэш Base 64, чтобы сделать URL короче - PullRequest
1 голос
/ 09 июня 2011

PHP sha256 выводит строку длиной 64 символа, потому что это основание 16. Как я могу преобразовать это в основание 64, чтобы уменьшить его длину?

Ответы [ 3 ]

9 голосов
/ 09 июня 2011
base64_encode(hash('sha256', 'hello', true));
2 голосов
/ 09 июня 2011

Если у вас уже есть хеш, и вы не контролируете его генерацию, то должно сработать что-то вроде следующего:

<?php

function hex2char($c) {
  return chr(hexdec($c));
}

function char2hex($c) {
  return str_pad(dechex(ord($c)),2,"0",STR_PAD_LEFT);
}


function base16to64($v) {
  return base64_encode(implode(array_map("hex2char", str_split($v,2))));

}

function base64to16($v) {
  return implode(array_map("char2hex",str_split(base64_decode($v),1)));

}


$input = hash('sha256', 'hello');

print($input . "\n");
print(base16to64($input) . "\n");
print(base64to16(base16to64($input)) . "\n");


?>

возврат:

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

уменьшение размерахеша от 64 до 44.

0 голосов
/ 09 июня 2011

Для конвертации между базами используйте http://php.net/manual/en/function.base-convert.php

С ответом выше, это не работает для комментария здесь.

...