PHPackages                             wzhih/guomi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. wzhih/guomi

ActiveLibrary[Security](/categories/security)

wzhih/guomi
===========

国密sm2

1.0.4(4y ago)77835MITPHPPHP &gt;=5.6

Since Jul 7Pushed 3y agoCompare

[ Source](https://github.com/wzhih/guomi)[ Packagist](https://packagist.org/packages/wzhih/guomi)[ RSS](/packages/wzhih-guomi/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (7)Used By (0)

前文
==

[](#前文)

本项目由`lpilp`大佬以下项目fork而来

### 注意点

[](#注意点)

- 本项目是为了适配`php5.6`而做的修改，`php:7.2`及以上不建议使用
- 由于官方打包的`windows`版`php`都是`32`位的，所以在本项目的`位运算`中，会导致溢出`PHP_INT_MAX`内核常量

#### 如何查看php是否32位

[](#如何查看php是否32位)

1. 输出`PHP_INT_SIZE`，如果返回是 4 就是 32 位的，如果返回是 8 就是 64 位的
2. 输出`PHP_INT_MAX`， 64 位的会返回 `9223372036854775807`

#### 如何避免`32`位的`位预算溢出`问题?有两种办法

[](#如何避免32位的位预算溢出问题有两种办法)

1. 改换`64`位的`php`(线上项目估计换不了， `windows`也难以自己编译`64`位的`php`)
2. 将`位运算`改成使用`gmp`扩展，如以下代码示例

```
//以下两句代码是一样的效果
$r = gmp_intval(gmp_div(128, gmp_pow(2, 3)));//$r = 16

$r = 128 >> 3;//$r = 16
```

---

php sm2 sm3 sm4 国密算法整理
======================

[](#php-sm2-sm3-sm4-国密算法整理)

- php版本的国密sm2的签名算法，非对称加解密算法（非对称加密刚上线，目前测试无问题，不能保证兼容其他语言，有问题可以提issues），sm3的hash, sm4的对称加解密，要求PHP７，打开gmp支持
- 目前如果服务器配套的使用的是openssl 1.1.1x, 目前到1.1.1.l(L) ,sm3,sm4都可以直接用openssl\_xxx系列函数直接实现，不必大量的代码,但不支持sm2的签名，sm2的加解密
- 有一个sm3, sm4的比较好的代码：  可以使用composer安装，只是这个的ecb, cbc没有做补齐

### 使用(how to use)

[](#使用how-to-use)

- composer require lpilp/guomi
- please make sure you upgrade to Composer 2+
- 测试是在php 7.4下做的，支持7.2及以上版本

### SM2

[](#sm2)

- 签名验签算法主体基于PHPECC算法架构，添加了sm2的椭圆参数，
- 参考了  童鞋的sm2验签算法，密钥生成算法
- 添加了签名算法， 支持sm2的16进制，base64公私钥的签名，验签算法
- 支持从文件中读取pem文件的签名，验签算法
- 添加了sm2的非对称加密的算法，但速度一般，有待优化，不能保证兼容所有语言进行加解密，目前测试了js, python的相互加解密
- sm2的加密解密算法在openssl 1.1.1的版本下自带的函数中暂无sm2的公钥私钥的加密函数，得自己实现，建议使用C，C++的算法，打包成PHP扩展的方式
- 由于 openssl没有实现sm2withsm3算法，用系统函数无法实现签名及证书的自签名分发

### SM3

[](#sm3)

- 该算法直接使用  中sm2签名用到的匹配sm3, 未做修改
- 也可使用 openssl的函数, 详见openssl\_tsm3.php

### SM4

[](#sm4)

- 该算法直接封装使用  的sm4算法， 同时该项目支持 sm3,sm4 ,可以composer安装
- 由于sm4-ecb, sm4-cbc加密需要补齐，项目lizhichao/sm项目未做补齐操作，这里封装的时候，针对这两个算法做了补齐操作， 其他如sm4-ctr,sm4-cfb,sm4-ofb等，可以直接用
- 在openssl 1.1.1下可使用系统的函数，已支持sm4-cbc,sm4-cfb,sm4-ctr,sm4-ecb,sm4-ofb， 详见openssl\_tsm4.php

### 总结

[](#总结)

- 这里封装的测试函数已与相关的js, python, java都可以互签互认
- js:
- python:
- java:
- openssl: 升到1.1.1以后，支持sm3,sm4的加解密，还不支持sm2的公私钥加解密，也不支持sm2的签名，得使用原生代码实现，签名中需要实现sm2withsm3, openssl1.1.1只实现了sm2whithsha256

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity24

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~35 days

Recently: every ~20 days

Total

6

Last Release

1590d ago

Major Versions

v0.1.0-alpha → v1.0.02021-10-12

PHP version history (3 changes)v1.0.0PHP &gt;=7.4

1.0.3PHP &gt;=7.2

1.0.4PHP &gt;=5.6

### Community

Maintainers

![](https://www.gravatar.com/avatar/33ca8eb6de205a8e4030439c5162a5cda3835c6ccb6575cd657febb5dced9c55?d=identicon)[wzhih](/maintainers/wzhih)

---

Top Contributors

[![lpilp](https://avatars.githubusercontent.com/u/36149355?v=4)](https://github.com/lpilp "lpilp (37 commits)")[![wzhih](https://avatars.githubusercontent.com/u/18170471?v=4)](https://github.com/wzhih "wzhih (4 commits)")

### Embed Badge

![Health badge](/badges/wzhih-guomi/health.svg)

```
[![Health](https://phpackages.com/badges/wzhih-guomi/health.svg)](https://phpackages.com/packages/wzhih-guomi)
```

###  Alternatives

[defuse/php-encryption

Secure PHP Encryption Library

3.9k162.4M212](/packages/defuse-php-encryption)[roave/security-advisories

Prevents installation of composer packages with known security vulnerabilities: no API, simply require it

2.9k97.3M6.4k](/packages/roave-security-advisories)[mews/purifier

Laravel 5/6/7/8/9/10 HtmlPurifier Package

2.0k16.7M112](/packages/mews-purifier)[robrichards/xmlseclibs

A PHP library for XML Security

41278.1M118](/packages/robrichards-xmlseclibs)[bjeavons/zxcvbn-php

Realistic password strength estimation PHP library based on Zxcvbn JS

86917.5M63](/packages/bjeavons-zxcvbn-php)[illuminate/encryption

The Illuminate Encryption package.

9229.7M277](/packages/illuminate-encryption)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
