國(guó)密SM2

本次國(guó)密算法sm2在 php7.2環(huán)境 Thinkphp5.1中應(yīng)用
開始前準(zhǔn)備以下擴(kuò)展

composer require mdanter/ecc
composer require wzhih/guomi

需要 gmp 擴(kuò)展

php -m查看是否存在擴(kuò)展。如果你使用的是寶塔可以在擴(kuò)展中直接安裝

openssl > 1.1.1版本

查看版本

openssl version
可以通過 yun升級(jí),
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
我這里暫時(shí)最新的是 https://www.openssl.org/source/openssl-3.2.1.tar.gz
如果實(shí)在安不上最新板,可以安裝1.1.1

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

#如果此步驟報(bào)錯(cuò),需要安裝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

#設(shè)置生效

ldconfig -v

最后查看本地openssl版本是否升級(jí)成功

生成公鑰私鑰

在線生成 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);
}

控制器中測(cè)試

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安裝
  • 安裝openssl時(shí)報(bào)錯(cuò)

    請(qǐng)注意這句話:【Can't locate IPC/Cmd.pm in @INC (@INC contains: /usr/local/src/openssl-3.2.1/util/perl】 說明缺少 IPC/Cmd.pm
#先安裝perl

$ yum install -y perl-CPAN

#進(jìn)入CPAN的 shell 模式,配置shell我選的全是默認(rèn)配置

$ perl -MCPAN -e shell

#在shell中安裝缺少的模塊

cpan[1]> install IPC/Cmd.pm


中間有報(bào)錯(cuò)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容