## php国密算法 - sm3 - 字符串签名 - 文件签名 - sm4 - ecb - cbc - cfb - ofb - ctr ## 安装 ```shell composer require lizhichao/one-sm ``` ## SM3签名 ```php sign('abc') . PHP_EOL; echo $sm3->sign(str_repeat("adfas哈哈哈", 100)) . PHP_EOL; // 文件签名 echo $sm3->signFile(__FILE__) . PHP_EOL; ``` ### 性能测试 和 [openssl](https://github.com/openssl/openssl) , [SM3-PHP](https://github.com/DongyunLee/SM3-PHP) 性能测试 ```shell php bench.php ``` 结果 ``` openssl:4901d7181a1024b8c0f59b8d3c5c6d96b4b707ad10e8ebc8ece5dc49364a3067 one-sm3:4901d7181a1024b8c0f59b8d3c5c6d96b4b707ad10e8ebc8ece5dc49364a3067 SM3-PHP:4901d7181a1024b8c0f59b8d3c5c6d96b4b707ad10e8ebc8ece5dc49364a3067 openssl time:6.3741207122803ms one-sm3 time:8.1770420074463ms SM3-PHP time:1738.5928630829ms ``` [测试代码bench.php](https://github.com/lizhichao/sm/blob/master/bench.php) ## SM4加密 ```php enDataEcb($data); // 加密后的长度和原数据长度一致 var_dump(strlen($d) === $str_len); // ECB解密 $d = $sm4->deDataEcb($d); // 解密后和原数据相等 var_dump(md5($d) === $sign); // 初始化向量16位 $iv = hex2bin(md5(2)); // CBC加密 $d = $sm4->enDataCbc($data, $iv); // 加密后的长度和原数据长度一致 var_dump(strlen($d)===$str_len); // CBC解密 $d = $sm4->deDataCbc($d, $iv); // 解密后和原数据相等 var_dump(md5($d)===$sign); ``` ## 我的其他仓库 * [一个极简高性能php框架,支持[swoole | php-fpm ]环境](https://github.com/lizhichao/one) * [clickhouse tcp 客户端](https://github.com/lizhichao/one-ck) * [中文分词](https://github.com/lizhichao/VicWord) * [nsq客户端](https://github.com/lizhichao/one-nsq)