前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AES-128-CBC-Pkcs7Padding加密PHP实例

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

作者头像
OwenZhang
发布2022-12-07 14:44:10
1.6K0
发布2022-12-07 14:44:10
举报
文章被收录于专栏:Owen's WorldOwen's World

本文正在参加「金石计划 . 瓜分6万现金大奖」

本文环境 PHP8.1,Mysql5.7 不懂的可以评论或联系我邮箱:owen@owenzhang.com 著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。

image.png
image.png

大概

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介绍

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,

  • 参数说明:
  • $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无需填写

具体代码

代码语言:javascript
复制
<?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==');

本文正在参加「金石计划 . 瓜分6万现金大奖」

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大概
  • AES介绍
  • AES-PHP服务代码
    • 代码块介绍
    • 具体代码
    • AES-调用代码
      • AES加密
        • AES解密
        相关产品与服务
        SSL 证书
        腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com