国密SM2

2024-04-17  本文已影响0人  淡淡de盐

本次国密算法sm2在 php7.2环境 Thinkphp5.1中应用
开始前准备以下扩展

composer require mdanter/ecc
composer require wzhih/guomi

需要 gmp 扩展

php -m查看是否存在扩展。如果你使用的是宝塔可以在扩展中直接安装

openssl > 1.1.1版本

查看版本

openssl version
可以通过 yun升级,
sudo yum update openssl

下载想要的版本 https://www.openssl.org/source/index.html
如果想下 1.1.1 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
我这里暂时最新的是 https://www.openssl.org/source/openssl-3.2.1.tar.gz
如果实在安不上最新板,可以安装1.1.1

tar -zxvf openssl-3.2.1.tar.gz
cd openssl-3.2.1

#如果此步骤报错,需要安装perl以及gcc包[安装方法在下面]

./config --prefix=/usr/local/openssl
make && make install

#备份

mv /usr/bin/openssl /usr/bin/openssl.bak
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

#设置生效

ldconfig -v

最后查看本地openssl版本是否升级成功

生成公钥私钥

在线生成 https://const.net.cn/tool/sm2/genkey/
生成好的密钥放在config或env下,我这里直接放入evn下了

[sm2]
private_key=xxxx
public_key=xxxxxxxxxxxx

在function中加入以下方法

// config/function.php

function encryptSm2($str, $publicKey)
{
    $sm2 = new \Rtgm\sm\RtSm2();
    $m2EncryptData = $sm2 ->doEncrypt($str, $publicKey);
    return $m2EncryptData;
}

function decryptSm2($m2EncryptData, $privateKey)
{
    $sm2 = new \Rtgm\sm\RtSm2();
    $m2DecryptData = $sm2 ->doDecrypt($m2EncryptData, $privateKey);
    return $m2DecryptData;
}

function signSm2($document, $privateKey)
{
    $sm2 = new \Rtgm\sm\RtSm2('base64');
    return $sm2 ->doSign($document, $privateKey);
}

function verifySignSm2($document, $sign, $publicKey)
{
    $sm2 = new \Rtgm\sm\RtSm2('base64');
    return $sm2 ->verifySign($document, $sign, $publicKey);
}

控制器中测试

public function test()
{
    $str   = '123456串';
    $enSm2 = encryptSm2($str);
    $deSm2 = decryptSm2($enSm2);
    dump($enSm2);
    dump($deSm2);

    $sign   = signSm2($str);
    $verify = verifySignSm2($str, $sign);
    dump($sign);
    dd($verify);
}
perl安装
#先安装perl

$ yum install -y perl-CPAN

#进入CPAN的 shell 模式,配置shell我选的全是默认配置

$ perl -MCPAN -e shell

#在shell中安装缺少的模块

cpan[1]> install IPC/Cmd.pm


中间有报错

Reading '/home/zhangjie/.cpan/sources/modules/03modlist.data.gz'
Can't locate object method "data" via package "CPAN::Modulelist"

解决办法:

$ perl -MCPAN -e shell
cpan[1]> o conf urllist unshift http://www.perl.com/CPAN/
cpan[2]> o conf commit

上一篇下一篇

猜你喜欢

热点阅读