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

打印 上一主题 下一主题

主题 840|帖子 840|积分 2520

安装库:
   composer require “lpilp/guomi”: “^1.0”
  1. <?php
  2. namespace app\common\service\crypto;
  3. class CryptoHelper
  4. {
  5.     private $privateKeyHex;
  6.     private $desKey;
  7.     private $userInfo;
  8.     // 构造函数,初始化私钥、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';//私钥"
  9.     public function __construct($privateKeyHex, $desKey, $userInfo)
  10.     {
  11.         $privateKeyHex = str_replace(":", "", $privateKeyHex);
  12.         $this->privateKeyHex = $privateKeyHex;
  13.         $this->desKey = $desKey;
  14.         $this->userInfo = $userInfo;
  15.     }
  16.     // 解密用户信息
  17.     public function decryptUserInfo()
  18.     {
  19.         // Step 2: 使用 SM2 解密 DES 密钥
  20.         $sm2 = new SM2($this->privateKeyHex);
  21.         $sm4KeyBytes = $sm2->decrypt($this->desKey,$this->userInfo);
  22.         // Step 3: 使用 SM4 解密 UserInfo
  23.         $sm4 = new SM4($sm4KeyBytes);
  24.         return $sm4->decrypt($this->userInfo);
  25.     }
  26. }
复制代码
SM2
  1. <?php
  2. namespace app\common\service\crypto;
  3. use Rtgm\sm\RtSm2;
  4. class SM2
  5. {
  6.     private $privateKey;
  7.     public function __construct($privateKeyHex)
  8.     {
  9.         $this->privateKey = $privateKeyHex;
  10.     }
  11.     public function decrypt($data, $userInfo)
  12.     {
  13.         // 调用 SM2 解密算法
  14.         return $this->sm2_decrypt($this->privateKey, $data);
  15.     }
  16.     // SM2 解密实现(假设使用 openssl 进行解密)
  17.     private function sm2_decrypt($privateKey, $data)
  18.     {
  19.         $sm2 = new RtSm2('base64', false);
  20.         $m2DecryptData = $sm2->doDecrypt(bin2hex(base64_decode($data)), $privateKey);
  21.         return $m2DecryptData;
  22.     }
  23. }
复制代码
SM4
  1. <?php
  2. namespace app\common\service\crypto;
  3. use Rtgm\sm\RtSm4;
  4. class SM4
  5. {
  6.     private $key;
  7.     public function __construct($key)
  8.     {
  9.         $this->key = $key;
  10.     }
  11.     public function decrypt($data)
  12.     {
  13.         // 调用 SM4 解密算法
  14.         return $this->sm4_decrypt($this->key, $data);
  15.     }
  16.     // SM4 解密实现(假设使用 openssl 实现 AES 解密)
  17.     private function sm4_decrypt($key, $data)
  18.     {
  19.         $sm4 = new RtSm4($key);
  20.         $result = $sm4->decrypt($data, 'sm4-ecb', '', 'base64');
  21.         return $result;
  22.     }
  23. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表