PHP 使用匿名函数 实现 base64/32/16 加密解密(encode/decode) 作者: Chuwen 时间: 2020-07-02 分类: PHP 评论 > base16/32 加密解密 是在网上找的拼凑的 ``` 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'))); ```