thinkphp6.0 (PHP8.2)腾讯云 E证通,sm2 sm4 解密 用户数据

安装库:

composer require “lpilp/guomi”: “^1.0”

<?php


namespace app\common\service\crypto;


class CryptoHelper
{
    private $privateKeyHex;
    private $desKey;
    private $userInfo;

    // 构造函数,初始化私钥、desKey密钥和userInfo用户信息 privateKeyHex="'12b:d5:65:8d:f1:70:6d:bd:53:47:21:db:de:9a:18:bf:0a:2f:62:1b:b8:30:2b:84:5c:07:38:a0:5c:7d:ce:76';//私钥"
    public function __construct($privateKeyHex, $desKey, $userInfo)
    {
        $privateKeyHex = str_replace(":", "", $privateKeyHex);
        $this->privateKeyHex = $privateKeyHex;
        $this->desKey = $desKey;
        $this->userInfo = $userInfo;
    }

    // 解密用户信息
    public function decryptUserInfo()
    {
        // Step 2: 使用 SM2 解密 DES 密钥
        $sm2 = new SM2($this->privateKeyHex);
        $sm4KeyBytes = $sm2->decrypt($this->desKey,$this->userInfo);

        // Step 3: 使用 SM4 解密 UserInfo
        $sm4 = new SM4($sm4KeyBytes);
        return $sm4->decrypt($this->userInfo);
    }
}

SM2

<?php


namespace app\common\service\crypto;

use Rtgm\sm\RtSm2;

class SM2
{
    private $privateKey;

    public function __construct($privateKeyHex)
    {
        $this->privateKey = $privateKeyHex;
    }

    public function decrypt($data, $userInfo)
    {
        // 调用 SM2 解密算法
        return $this->sm2_decrypt($this->privateKey, $data);
    }

    // SM2 解密实现(假设使用 openssl 进行解密)
    private function sm2_decrypt($privateKey, $data)
    {
        $sm2 = new RtSm2('base64', false);

        $m2DecryptData = $sm2->doDecrypt(bin2hex(base64_decode($data)), $privateKey);

        return $m2DecryptData;

    }
}

SM4

<?php


namespace app\common\service\crypto;

use Rtgm\sm\RtSm4;

class SM4
{
    private $key;

    public function __construct($key)
    {
        $this->key = $key;
    }

    public function decrypt($data)
    {
        // 调用 SM4 解密算法

        return $this->sm4_decrypt($this->key, $data);
    }

    // SM4 解密实现(假设使用 openssl 实现 AES 解密)
    private function sm4_decrypt($key, $data)
    {
        $sm4 = new RtSm4($key);
        $result = $sm4->decrypt($data, 'sm4-ecb', '', 'base64');

        return $result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值