我想在 URL 中传递河豚加密字符串,并希望像 base64 一样对其进行编码,但没有任何特殊字符,像 base62 这样的东西就很好(0-9a-zA-Z)。所以我想做的是使用base64_encode 转换河豚加密字符串,并将base64 转换为base62。
我知道如何使 base64 url 安全的解决方案,但我真的不希望字符串中出现任何特殊字符。 Convert_base() 仅适用于基数最大为 36 的情况,数学扩展可以转换为基数最大为 62 的情况。
有人知道如何使用 PHP 将 Base64 字符串转换为 Base62 吗?
function base62encode($data) {
$outstring = '';
$l = strlen($data);
for ($i = 0; $i < $l; $i += 8) {
$chunk = substr($data, $i, 8);
$outlen = ceil((strlen($chunk) * 8)/6); //8bit/char in, 6bits/char out, round up
$x = bin2hex($chunk); //gmp won't convert from binary, so go via hex
$w = gmp_strval(gmp_init(ltrim($x, '0'), 16), 62); //gmp doesn't like leading 0s
$pad = str_pad($w, $outlen, '0', STR_PAD_LEFT);
$outstring .= $pad;
}
return $outstring;
}
function base62decode($data) {
$outstring = '';
$l = strlen($data);
for ($i = 0; $i < $l; $i += 11) {
$chunk = substr($data, $i, 11);
$outlen = floor((strlen($chunk) * 6)/8); //6bit/char in, 8bits/char out, round down
$y = gmp_strval(gmp_init(ltrim($chunk, '0'), 62), 16); //gmp doesn't like leading 0s
$pad = str_pad($y, $outlen * 2, '0', STR_PAD_LEFT); //double output length as as we're going via hex (4bits/char)
$outstring .= pack('H*', $pad); //same as hex2bin
}
return $outstring;
}
$str62 = base62_encode(base64_decode($str64)) // $str64 = our string base64 encoded
所有学分都转到Marcus Bointon
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)