AES-128-CBC-Pkcs7Padding加密PHP实例_密钥长度

大概

AES-128-CBC-Pkcs7Padding加密PHP实例:

编码base64,模式cbc,填充Pkcs7Padding,位数128位,

输入格式base64,输出格式string,字符集utf-8,

密钥T3lUf3t4ddHzSx8U,偏移量cdccB3uiWDu7mcxw

(例如17350886066加密后+eupvMFtSc0E7veMi+XCgQ==)

(https://www.mklab.cn/utils/aes)

(https://www.lddgo.net/encrypt/aes)

AES-128-CBC-Pkcs7Padding加密PHP实例_java_02

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, $method, $password, $options, $iv) - 参数说明: - $data 加密明文 - $method 加密方法: DES-ECB

DES-CBC

DES-CTR

DES-OFB

DES-CFB

  • $passwd 加密密钥[密码]
  • $options 数据格式选项(可选)【选项有:】 0

OPENSSLRAWDATA=1

OPENSSLZEROPADDING=2

OPENSSLNOPADDING=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 APIAESKEY = 'T3lUf3t4ddHzSx8U'; $mobileAesEncrypt = AesService::instance()->setkey(APIAESKEY)->encrypt('17350886066');

AES解密

const APIAESKEY = 'T3lUf3t4ddHzSx8U'; $mobileAesDecrypt = AesService::instance()->setkey(APIAESKEY)->decrypt('+eupvMFtSc0E7veMi+XCgQ==');