gpt4 book ai didi

phpass 的自定义 base 64 编码器 : does it have a name/advantage over Base64?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:34 25 4
gpt4 key购买 nike

phpassencode64() 中使用了一个奇怪的(对我来说)算法以 base 64 编码。 Base64Uuencode线性分块 6 位以在映射到可打印字符之前生成每个八位位组。 encode64 随机排列位:

input bit location:    abcdefgh ijklmnop qrstuvwx
base64 bit location: ..abcdef ..ghijkl ..mnopqr ..stuvwx
encode64 bit location: ..cdefgh ..mnopab ..wxijkl ..qrstuv

这个算法是众所周知的吗?除了向后兼容,为什么选择它而不是 Base64

下面我重写了它以阐明算法:

function encode64($input, $bytesToProcess)
{
// convert to array of ints
for ($i = 0; $i < $bytesToProcess; $i++) {
$bytes[] = ord($input[$i]);
}

$octets = array();
$i = 0;
do {
$value = $bytes[$i++];
$octets[] = $value & 0x3f;
if ($i < $bytesToProcess) {
$value |= $bytes[$i] << 8;
}
$octets[] = ($value >> 6) & 0x3f;
if ($i++ >= $bytesToProcess) {
break;
}
if ($i < $bytesToProcess) {
$value |= $bytes[$i] << 16;
}
$octets[] = ($value >> 12) & 0x3f;
if ($i++ >= $bytesToProcess) {
break;
}
$octets[] = ($value >> 18) & 0x3f;
} while ($i < $bytesToProcess);

return array_map(function ($i) {
return str_pad(base_convert($i, 10, 2), 6, '0', STR_PAD_LEFT);
}, $octets);
}

var_export(encode64("Man", 3));

(已更新以准确指示每个输入位的移动位置)

最佳答案

encode64() 看起来像是标准 base64 的实现,它以相反的顺序计算位并使用不同的字符集——如果你以正确的方式眯着眼睛,它会选择 last 例如,第一个输出字符的第一个字节的 6 位。这可能只是一个错误;这样做没有安全或性能优势(并且相对于 PHP 的原生 base64_encode 存在一些性能缺陷)。

关于phpass 的自定义 base 64 编码器 : does it have a name/advantage over Base64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com