Skip to content

Commit

Permalink
更新readme里的sm2非对称加密说明
Browse files Browse the repository at this point in the history
  • Loading branch information
lpilp committed Nov 4, 2022
1 parent 2790105 commit ab43326
Showing 1 changed file with 4 additions and 9 deletions.
13 changes: 4 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,12 @@
* 参考了 https://github.com/ToAnyWhere/phpsm2 童鞋的sm2验签算法,密钥生成算法
* 添加了签名算法, 支持sm2的16进制,base64公私钥的签名,验签算法
* 支持从文件中读取pem文件的签名,验签算法
* 由于 openssl没有实现sm2withsm3算法,用系统函数无法实现签名及证书的自签名分发

### SM2非对称加密
* 添加了sm2的非对称加密的算法,但速度一般,有待优化,不能保证兼容所有语言进行加解密,目前测试了js, python的相互加解密
* sm2的加密解密算法在openssl 1.1.1的版本下自带的函数中暂无sm2的公钥私钥的加密函数,得自己实现,建议使用C,C++的算法,打包成PHP扩展的方式
* 由于 openssl没有实现sm2withsm3算法,用系统函数无法实现签名及证书的自签名分发
* SM2的非对称加密缺省的是c1c3c2, 请使用的时候注意下,对方返回的是c1c3c2还是c1c2c3,进行相应的修改更新,还有一点就是本项目中c1前面没有04, 视对接方的需求,看是否添加\x04, 16进制下 从c1c2c3转c1c3c2如下
```php
$c1 = substr($data,0,130); //前面有04,没04的话,这里是128, 相应的后面两行的130 改成128
$c3 = substr($data,-64);
$c2 = substr($data,130,strlen($data)-130-64);

$data = $c1.$c3.$c2;
```
* SM2的非对称加密缺省的是c1c3c2, 请使用的时候注意下,对方返回的是c1c3c2还是c1c2c3,进行相应的修改更新,还有一点就是本项目中c1前面没有04, 视对接方的需求,看是否添加\x04, v1.0.6版已对c1c3c2还是c1c2c3做了兼容,缺省是c1c3c2,添加相应的modetype后可以兼容两种模式,使用方法见 test/tsm2_encrypt.php

### SM3
* 该算法直接使用 https://github.com/ToAnyWhere/phpsm2 中sm2签名用到的匹配sm3, 未做修改
Expand Down

0 comments on commit ab43326

Please sign in to comment.