PHP 使用匿名函数 实现 base64/32/16 加密解密(encode/decode)

base16/32 加密解密 是在网上找的拼凑的
<?php

$encode = [
    16 => function ($str) {
        $encode = '';
        $chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
        for ($i = 0; $i < strlen($str); $i++) {
            $encode .= $chars[(ord($str[$i]) & 0b11110000) >> 4] . $chars[ord($str[$i]) & 0b00001111];
        }
        return $encode;
    },
    32 => function ($str) {
        $BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
        $output = '';
        $v = 0;
        $vbits = 0;
        for ($i = 0, $j = strlen($str); $i < $j; $i++) {
            $v <<= 8;
            $v += ord($str[$i]);
            $vbits += 8;
            while ($vbits >= 5) {
                $vbits -= 5;
                $output .= $BASE32_ALPHABET[$v >> $vbits];
                $v &= ((1 << $vbits) - 1);
            }
        }
        if ($vbits > 0) {
            $v <<= (5-$vbits);
            $output .= $BASE32_ALPHABET[$v];
        }
        return $output;
    },
    64 => function ($str) {
        return base64_encode($str);
    },
];
$decode = [
    16 => function ($str) {
        $result = '';
        for ($i = 0; $i < strlen($str) / 2; $i++) {
            $result .= chr(intval(substr($str, $i * 2, 2), 16));
        }
        return $result;
    },
    32 => function ($str) {
        $output = '';
        $v = 0;
        $vbits = 0;
        for($i = 0, $j = strlen($str); $i < $j; $i++) {
            $v <<= 5;
            if ($str[$i] >= 'a' && $str[$i] <= 'z') {
                $v += (ord($str[$i]) - 97);
            }
            elseif ($str[$i] >= '2' && $str[$i] <= '7') {
                $v += (24 + $str[$i]);
            }
            else {
                exit(1);
            }
            $vbits += 5;
            while($vbits >= 8){
                $vbits -= 8;
                $output .= chr($v >> $vbits);
                $v &= ((1 << $vbits) - 1);
            }
        }
        return $output;
    },
    64 => function ($str) {
        return base64_decode($str);
    },
];

var_dump($encode[16]('chuwen'));
var_dump($encode[32]('chuwen'));
var_dump($encode[64]('chuwen'));

echo PHP_EOL;

var_dump($decode[16]($encode[16]('chuwen')));
var_dump($decode[32]($encode[32]('chuwen')));
var_dump($decode[64]($encode[64]('chuwen')));

如无特别声明,该文章均为 现在网NowTime.cc)原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。


标签: PHP, base, base64, base32, base16

赞 (0)

添加新评论