失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php生成国密验证 PHP+gmssl命令行实现国密加解密

php生成国密验证 PHP+gmssl命令行实现国密加解密

时间:2022-03-11 18:02:40

相关推荐

php生成国密验证 PHP+gmssl命令行实现国密加解密

1. 国密介绍

国密算法是我国自主研发创新的一套数据加密处理系列算法。从SM1-SM4分别实现了对称、非对称、摘要等算法功能。特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能。当然,默认的前提条件是算法密钥必须保证安全性,因此要将国密算法嵌入到硬件加密芯片中结合使用。

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。

SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。

2. 实现方法

PHP调用linux命令实现,可实现SM2加解密签名验签,SM3摘要加密,SM4对称加密文件加密,不需要gmssl和PHP编译,变动小。

2. 环境要求

相对来讲,环境要求低,只要下载安装gmssl就好,并且与openssl兼容

其实在openssl1.1.1+上已经实现了国密算法C语言实现,openssl不用多介绍了吧(不知道的好好反思一下),有C扩展经验的同学可以自己实现C扩展,当然可以直接拿C语言实现国密算法的就当笑话看吧,原谅我C语言早还给大学了,所以写C扩展供PHP调用对我来说短时间还是没办法做到,立个flag,C扩展从入门到放弃走起。

但是在本文中并没有使用openssl,而是他的一个分支Gmssl,因为openssl命令行并没有提供SM2的加解密和签名验签(也可能是我没找到,o(╥﹏╥)o)

github:gmsslgit地址

gmssl网站:地址 有点耐心,这网站时不时打不开

3. 安装gmssl

下载gmssl:点击下载

unzip master.zip

cd GmSSL-master/

./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared //“--prefix=/usr/local/gmssl” 指定安装路径 “no-shared” 只编译静态库,不编译动态库,解决和openssl兼容问题

make

make install

4. bug片段

/**

* php exec请求linux命令拼凑完整结果

*

* @param $command 命令行

*

* @return mixed|string

* @author zhaozl@

*/

function cutil_exec($command) {

$str = \;

try {

$res = exec($command, $out);

if ($res) {

foreach ($out as $value) {

$str .= $value;

}

}

}

catch (Exception $e) {

}

return $str;

}

/**

*

* 生成国密SM2非对称加密公钥

*

* @param $key 标识key

* @

如果觉得《php生成国密验证 PHP+gmssl命令行实现国密加解密》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。