1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- <?php
- declare(strict_types=1);
- namespace App\Utils\Encrypt;
- use App\Master\Enum\RedisKeyEnum;
- use App\Utils\RedisUtil;
- class Aes
- {
- /**
- * 加密
- * @param string $data 要加密的数据
- * @param string $key 密钥应该是16字节(128位),24字节(192位)或32字节(256位)
- * @param string $method 加密类型
- * @return string
- */
- public static function encode(string $data, string $key, string $method = 'AES-256-CBC'): string
- {
- $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method)); // 生成随机IV
- $encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
- // 使用base64编码输出加密数据,以便于存储和传输
- return base64_encode($iv . $encrypted);
- }
- /**
- * 解密
- * @param string $data 要加密的数据
- * @param string $key 密钥应该是16字节(128位),24字节(192位)或32字节(256位)
- * @param string $method 加密类型
- * @return false|string
- */
- public static function decode(string $data, string $key, string $method = 'AES-256-CBC'): false|string
- {
- $decodedData = base64_decode($data);
- $iv = substr($decodedData, 0, openssl_cipher_iv_length($method));// 提取IV
- $decryptedData = substr($decodedData, openssl_cipher_iv_length($method));// 提取加密文本
- return openssl_decrypt($decryptedData, $method, $key, OPENSSL_RAW_DATA, $iv);
- }
- private static function base64UrlEncode(string $input): string
- {
- return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
- }
- private static function base64UrlDecode(string $input): false|string
- {
- $remainder = strlen($input) % 4;
- if ($remainder) {
- $add_len = 4 - $remainder;
- $input .= str_repeat('=', $add_len);
- }
- return base64_decode(strtr($input, '-_', '+/'));
- }
- }
|