random-ghost/gmssl-client

PHP SDK for GMSSL Server - SM2/SM3/SM4 cryptographic operations, key management, and audit logging

Maintainers

Package info

gitee.com/random-ghost_admin/gmssl-client

pkg:composer/random-ghost/gmssl-client

Transparency log

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

1.0.1 2026-08-07 14:38 UTC

This package is not auto-updated.

Last update: 2026-08-08 10:12:26 UTC


README

国密算法服务 PHP 客户端工具包,支持 SM2/SM3/SM4 密码运算、密钥管理(托管签名/解密)、审计日志

GM/T 0030 合规:SM2 私钥不出境,签名/解密通过 key_id 托管完成,私钥永不在 API 响应中返回。

环境要求

  • PHP >= 8.1
  • ext-curl
  • ext-json

安装

Composer 安装

composer require random-ghost/gmssl-client 

手动引入(无 Composer)

require_once 'src/GmsslClient.php';
require_once 'src/GmsslException.php';
require_once 'src/GmsslResponse.php';
require_once 'src/SM2.php';
require_once 'src/SM3.php';
require_once 'src/SM4.php';
require_once 'src/KeyManagement.php';
require_once 'src/Audit.php';

快速开始

use Gmssl\GmsslClient;
use Gmssl\SM4;

// 密码操作客户端(公钥验签/加密、SM3、SM4)
$crypto = new GmsslClient('http://localhost:21210', 'gmssl-crypto-key-2026');

// 管理操作客户端(密钥管理、托管签名/解密)
$admin = new GmsslClient('http://localhost:21210', 'gmssl-admin-key-2026');

// SM3 哈希
$hash = $crypto->sm3()->hash('hello world');

// SM4 加密
$key = SM4::generateKey();
$iv  = SM4::generateIV();
$cipher = $crypto->sm4()->encryptCBC($key, $iv, '敏感数据');
$plain  = $crypto->sm4()->decryptCBC($key, $iv, $cipher);

// SM2 托管密钥:创建 → 签名 → 验签
$km = $admin->keyManagement();
$keyInfo = $km->create('my-key', 'sm2', '签名密钥');
$sig = $km->sign($keyInfo['id'], '待签名数据');              // 托管签名
$valid = $crypto->sm2()->verify($keyInfo['public_key'], '待签名数据', $sig);  // 公钥验签

// SM2 托管密钥:加密 → 解密
$cipher = $crypto->sm2()->encrypt($keyInfo['public_key'], '机密数据');
$plain  = $km->decrypt($keyInfo['id'], $cipher);             // 托管解密

API 参考

GmsslClient 主类

$client = new GmsslClient(
    string $baseUrl,      // 服务地址
    string $apiKey,       // API Key
    int $timeout = 30,    // 请求超时
    array $headers = []   // 额外 HTTP 头
);

模块访问

方法返回说明所需权限
sm2()SM2公钥验签/加密sm2
sm3()SM3密码杂凑sm3
sm4()SM4对称加密sm4
keyManagement()KeyManagement密钥管理 + 托管签名/解密keymgmt (admin)
audit()Audit审计日志audit (admin)

系统方法

方法说明
healthCheck(): bool健康检查(免认证)
version(): array获取版本信息(免认证)

SM2 模块(公钥操作)

$sm2 = $client->sm2();
方法参数返回说明
verify($pubKey, $data, $sig)PEM 公钥, 原始数据, Base64 签名bool公钥验签
encrypt($pubKey, $plain)PEM 公钥, 原始明文Base64 密文公钥加密

签名和解密请使用 KeyManagement 模块的 sign()decrypt() 方法(托管模式,GM/T 0030 合规)。

SM3 模块

$sm3 = $client->sm3();
方法参数返回说明
hash($data)原始数据64 字符十六进制SM3 哈希
hmac($key, $data)密钥, 数据64 字符十六进制SM3 HMAC
verifyHash($data, $hash)数据, 期望哈希bool验证哈希
verifyHmac($key, $data, $hmac)密钥, 数据, 期望 HMACbool验证 HMAC

SM4 模块

$sm4 = $client->sm4();
方法参数返回说明
encrypt($key, $data, $mode, $iv)密钥, 明文, 模式, IVBase64 密文加密
decrypt($key, $cipher, $mode, $iv)密钥, 密文, 模式, IV原始明文解密
encryptCBC($key, $iv, $data)-Base64 密文CBC 快捷加密
decryptCBC($key, $iv, $cipher)-原始明文CBC 快捷解密
encryptECB($key, $data)-Base64 密文ECB 快捷加密
decryptECB($key, $cipher)-原始明文ECB 快捷解密
SM4::generateKey()-16 字节随机密钥生成密钥
SM4::generateIV()-16 字节随机 IV生成 IV

模式常量SM4::MODE_CBC / SM4::MODE_ECB / SM4::MODE_CFB / SM4::MODE_OFB

KeyManagement 模块(密钥管理 + 托管运算)

$km = $admin->keyManagement();
方法参数返回说明
create($name, $usage, $desc, $expires)名称, sm2/sm4, 描述, 有效期秒['id', 'name', 'usage', 'public_key']创建密钥
import($name, $privKey, $desc, $expires)名称, PEM 私钥, 描述, 有效期['id', 'name', 'usage', 'public_key']导入密钥
list()-['keys' => [...], 'total']列出密钥
get($id)密钥 ID密钥详情获取详情
sign($id, $data)密钥 ID, 原始数据Base64 签名托管签名
decrypt($id, $cipher)密钥 ID, Base64 密文原始明文托管解密
exportPublicKey($id)密钥 IDPEM 公钥导出公钥
disable($id)密钥 ID'disabled'禁用密钥
enable($id)密钥 ID'active'启用密钥
archive($id)密钥 ID'archived'归档密钥
destroy($id)密钥 ID'destroyed'销毁密钥

Audit 模块

$audit = $admin->audit();
方法参数返回说明
query($operation, $apiKey, $limit)操作类型, Key 过滤, 条数['entries' => [...], 'total']查询审计日志
verify()-['valid' => bool, 'error' => string]验证审计链
isChainValid()-bool审计链是否完整

错误处理

所有 API 错误通过 GmsslException 抛出:

use Gmssl\GmsslException;

try {
    $hash = $client->sm3()->hash('');
} catch (GmsslException $e) {
    echo "错误码: " . $e->getApiCode();    // 1003
    echo "错误信息: " . $e->getMessage();   // data is required

    // 便捷判断
    if ($e->isUnauthorized()) { /* 401 */ }
    if ($e->isForbidden()) { /* 403 */ }
    if ($e->isInvalidParam()) { /* 1003 */ }
    if ($e->isRateLimited()) { /* 429 */ }
}

完整示例

运行示例前请确保 GMSSL Server 已启动:

# 启动服务
./bin/gmssl-server.exe

# 运行示例
cd php-sdk
composer install   # 首次需要
php examples/demo.php

项目结构

php-sdk/
├── composer.json
├── README.md
├── src/
│   ├── GmsslClient.php       # 主客户端
│   ├── GmsslException.php    # 异常类
│   ├── GmsslResponse.php     # 响应封装
│   ├── SM2.php               # SM2 公钥操作(验签/加密)
│   ├── SM3.php               # SM3 密码杂凑
│   ├── SM4.php               # SM4 对称加密
│   ├── KeyManagement.php     # 密钥管理 + 托管签名/解密
│   └── Audit.php             # 审计日志
└── examples/
    └── demo.php              # 完整示例

合规说明

本 SDK 对接的 GMSSL Server 符合以下政务密码管理规范:

  • GM/T 0002 SM4 分组密码算法
  • GM/T 0003 SM2 椭圆曲线公钥密码算法
  • GM/T 0004 SM3 密码杂凑算法
  • GM/T 0030 密钥管理技术规范(私钥不出境,托管签名/解密)
  • GM/T 0054 密码应用安全要求(身份鉴别、安全审计)

License

MIT