大概
AES-128-CBC-Pkcs7Padding加密PHP实例:
编码base64,模式cbc,填充Pkcs7Padding,位数128位,
输入格式base64,输出格式string,字符集utf-8,
密钥T3lUf3t4ddHzSx8U,偏移量cdccB3uiWDu7mcxw
(例如17350886066加密后+eupvMFtSc0E7veMi+XCgQ==)
AES介绍
1.AES简介:
AES即高级加密标准(Advanced Encryption Standard),是美国NIST在2001年发布的,旨在代替DES称为广泛使用的标准。AES是一种对称分组密码算法。
2.AES的分组长度和密钥长度:
AES的明文分组长度为128位(16字节),密钥长度可以为128位(16字节)、192位(24字节)、256位(32字节),根据密钥长度的不同,AES分为AES-128、AES-192、AES-256三种。
AES-PHP服务代码
代码块介绍
openssl_encrypt(data,data, data,method, password,password, password,options, $iv)
- 参数说明:
- $data 加密明文
- $method 加密方法: DES-ECB
DES-CBC
DES-CTR
DES-OFB
DES-CFB
- $passwd 加密密钥[密码]
- $options 数据格式选项(可选)【选项有:】 0
OPENSSL_RAW_DATA=1
OPENSSL_ZERO_PADDING=2
OPENSSL_NO_PADDING=3
- $iv 密初始化向量(可选)
如果method为DES-ECB,则iv无需填写
具体代码
<?php namespace app\service; class AesService { public static ?AesService $_instance = null; /*密钥,22个字符*/ protected string $key = 'T3lUf3t4ddHzSx8U'; /*向量,8个或10个字符*/ protected string $iv = 'cdccB3uiWDu7mcxw'; /** * @return AesService|mixed */ public static function instance(): ?AesService { if (!static::$_instance) static::$_instance = new self(); return static::$_instance; } public function setkey(string $key): static { $this->key = $key; return $this; } public function getkey(): string { return $this->key; } public function getiv(): string { return $this->iv; } /** * 加密 * AES/CBC/PKCS7Padding * AES加密:(https://www.mklab.cn/utils/aes) * 编码base64,模式CBC,填充Pkcs7Padding,位数128位,输入格式base64,输出格式string, * 字符集utf-8,密钥T3lUf3t4ddHzSx8U,偏移量cdccB3uiWDu7mcxw * (例如17350886066加密后+eupvMFtSc0E7veMi+XCgQ==) * (https://www.lddgo.net/encrypt/aes) * * @param boolean $status 是否加密 * * @return string 处理过的数据 */ public function encrypt($data, bool $status = true): string { if (is_array($data)) $data = json_encode($data); $key = $this->getkey(); $iv = $this->getiv(); if ($status) return base64_encode(openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv)); return $data; } /** * 解密 * * @return string 加密的字符串不是完整的会返回空字符串值 */ public function decrypt($data, bool $status = true): string { $key = $this->getkey(); $iv = $this->getiv(); if ($status) return openssl_decrypt(base64_decode($data), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); return $data; } }
AES-调用代码
AES加密
const API_AES_KEY = 'T3lUf3t4ddHzSx8U'; $mobileAesEncrypt = AesService::instance()->setkey(API_AES_KEY)->encrypt('17350886066');
AES解密
const API_AES_KEY = 'T3lUf3t4ddHzSx8U'; $mobileAesDecrypt = AesService::instance()->setkey(API_AES_KEY)->decrypt('+eupvMFtSc0E7veMi+XCgQ==');