All Projects → lpilp → phpsm2sm3sm4

lpilp / phpsm2sm3sm4

Licence: other
php版本,支持国密sm2的签名算法,非对称加解密,sm3的hash, sm4的对称加解密

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to phpsm2sm3sm4

cryptogm
An implement of china crypto standards, including sm2,sm3 ,sm4 and sm9 algorithms.
Stars: ✭ 26 (-67.5%)
Mutual labels:  sm2, sm3, sm4
yogcrypt
A fast, general purpose crypto library in pure Rust.
Stars: ✭ 18 (-77.5%)
Mutual labels:  sm2, sm3, sm4
java-gm
Java语言国密基础库
Stars: ✭ 33 (-58.75%)
Mutual labels:  sm2, sm3, sm4
libsm
A Rust Library of China's Standards of Encryption Algorithms (SM2/3/4)
Stars: ✭ 112 (+40%)
Mutual labels:  sm2, sm3, sm4
Gmssl
支持国密SM2/SM3/SM4/SM9/ZUC/SSL的OpenSSL分支
Stars: ✭ 2,747 (+3333.75%)
Mutual labels:  sm2, sm3, sm4
sm
php国密SM3,sm4算法
Stars: ✭ 132 (+65%)
Mutual labels:  sm3, sm4
composer-wp
Manage WordPress core, plugins, and themes with composer.
Stars: ✭ 16 (-80%)
Mutual labels:  composer
is-biz-mail-php
isBizMail tells you whether a given email address belongs to a free email account provider (gmail.com, yahoo.es, yandex.ru etc) or not.
Stars: ✭ 19 (-76.25%)
Mutual labels:  composer
LaravelFtp
Laravel FTP client
Stars: ✭ 15 (-81.25%)
Mutual labels:  composer
pysm4
Python SM4
Stars: ✭ 82 (+2.5%)
Mutual labels:  sm4
composer-inheritance-plugin
Opinionated version of Wikimedia composer-merge-plugin to work in pair with Bamarni composer-bin-plugin.
Stars: ✭ 20 (-75%)
Mutual labels:  composer
docker
docker environment for PHP developers
Stars: ✭ 12 (-85%)
Mutual labels:  composer
php-legal-licenses
A utility to help generate a file containing information about dependencies including the full license text.
Stars: ✭ 62 (-22.5%)
Mutual labels:  composer
docker-drupal
Docker scaffolding for Drupal 8
Stars: ✭ 41 (-48.75%)
Mutual labels:  composer
assert-true
A lot of ways to you set your assert as true
Stars: ✭ 19 (-76.25%)
Mutual labels:  composer
wpacked
📦 WPacked is a WordPress development starter kit with portability and immediate local development in mind.
Stars: ✭ 73 (-8.75%)
Mutual labels:  composer
composer-prefer-lowest
Checks prefer-lowest installation for actually defined min versions in composer.json
Stars: ✭ 13 (-83.75%)
Mutual labels:  composer
Base62
PHP Base62 encoder and decoder for integers and big integers with Laravel 5 support.
Stars: ✭ 16 (-80%)
Mutual labels:  composer
crook
Simple hook management tool made with PHP
Stars: ✭ 60 (-25%)
Mutual labels:  composer
XoopsCore25
XOOPS Core 2.5.x (current release is 2.5.10: https://github.com/XOOPS/XoopsCore25/releases)
Stars: ✭ 50 (-37.5%)
Mutual labels:  composer

php sm2 sm3 sm4 国密算法整理

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

使用(how to use)

  • composer require lpilp/guomi
  • please make sure you upgrade to Composer 2+
  • PHP >=7.2
  • 如需要使用php5.6 请使用wzhih童鞋fork修改的 https://github.com/wzhih/guomi ; composer require wzhih/guomi

SM2

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

SM3

SM4

  • 该算法直接封装使用 https://github.com/lizhichao/sm 的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: https://github.com/JuneAndGreen/sm-crypto 一个注意点就是: js的中文字符转成byte[]时,缺省的是unicode编码两字节,需要转成utf8的三字节编码,一个简单的方案 unescape(encodeURIComponent(str)) 然后再一个字节一个字节读就行了
  • python: https://github.com/duanhongyi/gmssl 使用 pip install gmssl 安装就可, 注意的就是在python2下 , string与byte[]是可以隐式转换的,在python3下需要显式地将string转成byte[]
  • java: https://github.com/ZZMarquis/gmhelper 注意下java中文的转码问题,getBytes("UTF-8"), 要加上编码类型, 因为 getBytes()函数的缺省编码是随操作系统的,如果是在中文版的windows中使用,缺省是GBK编码,就会出现中文的编码的问题,而造成签名无法通过
  • openssl: 升到1.1.1以后,支持sm3,sm4的加解密,还不支持sm2的公私钥加解密,也不支持sm2的签名,得使用原生代码实现,签名中需要实现sm2withsm3, openssl1.1.1只实现了sm2whithsha256;还有一点很诡异,用yum/dnf安装的openssl只支持sm3, 如果是自己编译安装的就支持sm3,sm4
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].