我正在为php寻找一个base32函数/类.我发现的不同类别和功能都非常无效.我运行了一个基准测试并得出以下结果:
10000个解码:
base32:2.3273秒
base64:0.0062秒
我使用的base32类是:
http://www.php.net/manual/en/function.base-convert.php#102232
有什么方法更简单吗?
我想使用base32的原因是它不区分大小写,因此我对url参数没有任何问题,这些参数在某些系统(例如电子邮件系统)上总是转换为小写字母.
如果您有更好的小写编码替代方案,我也很乐意听到它们.
解决方法:
对于PHP中的Base32,您可以在此处尝试我的实现:
https://github.com/ademarre/binary-to-text-php
从README文件中的Base32示例复制:
// RFC 4648 base32 alphabet; case-insensitive
$base32 = new Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', FALSE, TRUE, TRUE);
$encoded = $base32->encode('encode this');
// MVXGG33EMUQHI2DJOM======
它并不慢,它可能会或可能不会比你的基准测试类快,但它不会像base64_encode()这样的内置PHP函数那么快.如果这对您非常重要,并且您并不真正关心Base32编码,那么您应该只使用十六进制.您可以使用本机PHP函数对十六进制进行编码,并且它不区分大小写.
$encoded = bin2hex('encode this'); // 656e636f64652074686973
$decoded = pack('H*', $encoded); // encode this
// Alternatively, as of PHP 5.4...
$decoded = hex2bin($encoded); // encode this
十六进制的缺点是与Base32相比,数据通胀率更高.十六进制使数据膨胀100%,而Base32将数据膨胀约60%.