PHPackages                             ch4o5/sm3-php - 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. ch4o5/sm3-php

ActiveLibrary[Security](/categories/security)

ch4o5/sm3-php
=============

国密sm3加密方式的PHP实现

1.1.6(4y ago)11426.7k↑75%20[5 issues](https://github.com/DongyunLee/SM3-PHP/issues)[1 PRs](https://github.com/DongyunLee/SM3-PHP/pulls)1MPL-2.0PHPPHP &gt;=5.3.3CI failing

Since Oct 12Pushed 4y ago5 watchersCompare

[ Source](https://github.com/DongyunLee/SM3-PHP)[ Packagist](https://packagist.org/packages/ch4o5/sm3-php)[ Docs](https://sm3.doylee.cn/)[ Fund](https://afdian.net/@ch4o5)[ Fund](https://blog.doylee.cn/give-a-reward)[ RSS](/packages/ch4o5-sm3-php/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (5)Dependencies (1)Versions (13)Used By (1)

SM3-PHP
=======

[](#sm3-php)

国密标准SM3的原生PHP实现。

[![Latest Stable Version](https://camo.githubusercontent.com/c8f4aa805cf52d2b8e16572170b2de8097266e01204f076c7a7eccc43c763a14/68747470733a2f2f706f7365722e707567782e6f72672f6368346f352f736d332d7068702f76)](//packagist.org/packages/ch4o5/sm3-php)[![Latest Unstable Version](https://camo.githubusercontent.com/72c9616f24494f39aab6646a05d84ea04e65447c1609de6c7100e88b511f0c17/68747470733a2f2f706f7365722e707567782e6f72672f6368346f352f736d332d7068702f762f756e737461626c65)](//packagist.org/packages/ch4o5/sm3-php)[![License](https://camo.githubusercontent.com/a1cd3057ae8d415085fbb4ead1a1e62f17af66eb172046e87e3458ab1c60888d/68747470733a2f2f706f7365722e707567782e6f72672f6368346f352f736d332d7068702f6c6963656e7365)](//packagist.org/packages/ch4o5/sm3-php)[![FOSSA Status](https://camo.githubusercontent.com/fb9ec676a1bf96232405062cfc7cfda4508d0d62ae7d1014b919e80c1d5e8f1c/68747470733a2f2f6170702e666f7373612e636f6d2f6170692f70726f6a656374732f6769742532426769746875622e636f6d253246446f6e6779756e4c6565253246534d332d5048502e7376673f747970653d736869656c64)](https://app.fossa.com/projects/git%2Bgithub.com%2FDongyunLee%2FSM3-PHP?ref=badge_shield)

[![Run Tests](https://github.com/DongyunLee/SM3-PHP/actions/workflows/run_tests.yml/badge.svg)](https://github.com/DongyunLee/SM3-PHP/actions/workflows/run_tests.yml)[![Total Downloads](https://camo.githubusercontent.com/4901b2013486c52243837aba2f65b506ec8a7f022ef0bc2c076a80b7aacb23c4/68747470733a2f2f706f7365722e707567782e6f72672f6368346f352f736d332d7068702f646f776e6c6f616473)](//packagist.org/packages/ch4o5/sm3-php)[![Monthly Downloads](https://camo.githubusercontent.com/b48fbd193f9ac0226f5173954ca1beea765352b6deadece1dbe82864562b5f27/68747470733a2f2f706f7365722e707567782e6f72672f6368346f352f736d332d7068702f642f6d6f6e74686c79)](//packagist.org/packages/ch4o5/sm3-php)

前言
--

[](#前言)

在开发本库的过程中，发现了 *PHP* 的三个**痛点**，敬请各位**务必**要有所了解:

1. **PHP本身对其他进制转换为二进制，由于浮点数的长度特性，会造成数据丢失**，这样就会造成运算结果的错误，需要自己重写；
2. **PHP的位运算符没法直接进行二进制变量的与或非运算**，必须得自己重写；
3. 碍于PHP本身的解释型、弱类型语言特点，**运行速度没有C快**，所以并不是最优选择。

但我们常说，看问题要有两面性。

尽管 **PHP** 本身有诸多问题，唱衰之声不断，但仍然发展到今天的生态规模， 很多时候，我们的实际性能需求并没有严格到要求我们去考量语言之间的速度差异，而重在功能的实现。

况且，上面提到的诸多痛点都已经被我封装在了这个库里， 性能的优化交给我来做，大家只要负责调用，来实现业务逻辑即可。

也希望大家来都来了，点个 **Watch** 和 **Star** ，持续关注一下。在此拜谢！

特点
--

[](#特点)

1. 纯原生 *PHP* 代码，不额外依赖扩展项；
2. *OOP* + *Composer* ，更优雅，安装更简单；
3. 使用命名空间，防止变量名、方法名污染；
4. 引入了 *Composer* 的 *PSR-4* 规范，进行类的自动加载；
5. 使用 *PSR-12* 代码规范
6. 代码注释完整， 可配合《 [SM3密码杂凑算法](http://www.sca.gov.cn/sca/xwdt/2010-12/17/1002389/files/302a3ada057c4a73830536d03e683110.pdf) 》食用， 方便进一步学习和研究本算法。

要求
--

[](#要求)

- 5.3 &lt;= *php* &lt; 7.2

> *7.2 之后版本理论通过，但因为 phpunit 的版本兼容性问题，没有单元测试支撑*
>
> 1.x 版本之后只会作为低版本兼容，2.x 及之后版本会对 PHP 更高版本做适配，使用更多新特性

安装
--

[](#安装)

本库优先支持 Composer 安装，但为了尊重使用习惯，也提供了直接下载压缩包的方式。 但不得不说，Composer 式的以组件、包为单位的项目管理方式更加现代化、方便和优雅。

### 一、源码解压（不推荐）

[](#一源码解压不推荐)

1. 下载压缩包

    提供了 `.zip` 和 `.tar.gz` 两种格式的压缩包， 压缩包已经过 Composer 包的优化

    下载地址：
2. 解压到项目中的任意位置

    - Windows：

        使用 `winrar`/`7zip`/`Bandizip` 等工具解压
    - 类Unix：

        ```
        tar zxvf SM3-PHP.tar.gz
        # 或者
        unzip SM3-PHP.zip
        ```

```
    # 打包命令
    composer arch

    # 或 composer run-script arch
```

### 二、*composer* 安装（强烈推荐）

[](#二composer-安装强烈推荐)

1. 安装 *composer*

    详见 《[如何安装 Composer](https://pkg.phpcomposer.com/#how-to-install-composer)》
2. 安装慢可更换中文镜像

    由于大量先前的镜像失效，所以目前(2019-11-25)推荐使用阿里云镜像

    其实配置中已经把镜像配置成了阿里云的镜像。 但有效范围毕竟只有这一个包。

    开发环境中还是建议进行下全局的配置。

    更换阿里云镜像方式详见拙笔 《[向先行者致敬,迎接 Composer 的未来！](https://blog.doylee.cn/composer-chinese-mirror/)》
3. `composer require ch4o5/sm3-php`
4. `composer install`
5. `composer update`

    下述 `composer update` 参数作为生产环境的优化，分析、调试和阅读代码无须使用

    参数简单说明：

    1. `--prefer-dist`：优先构建好的包，而不是源码
    2. `--no-dev`：不安装`require-dev`中定义的包，减小包的大小
    3. `--no-plugins`：不安装插件
    4. `--with-dependencies`：递归更新依赖的包
    5. `--optimize-autoloader` / `-o`：转换 PSR-0/4 autoload 到 classmap 可以获得更快的加载支持
    6. `--classmap-authoritative`: **推荐** 使用后默认开启 `-o`，并对所有类加速

快速开始
----

[](#快速开始)

在根目录中的 *demo.php* 中，进行了简单地调用示范：

```
