php 国密 签名,关于php国密SM3签名算法

推荐:《PHP视频教程》

php国密SM3签名算法

代码地址

github.com/lizhichao/sm

安装

composer require lizhichao/one-sm

使用

require __DIR__ . '/vendor/autoload.php'; // 字符串签名 echo OneSmSm3::sign('abc') . PHP_EOL; echo OneSmSm3::sign(str_repeat("adfas哈哈哈", 100)) . PHP_EOL; // 文件签名 echo OneSmSm3::signFile(__FILE__) . PHP_EOL;

性能测试

和 openssl , SM3-PHP 性能测试

php bench.php

结果

openssl:7ad7adf191f10aeeb0b2c02e083d03c4c675351022b267722c4cc6589c7836e9 one-sm3:7ad7adf191f10aeeb0b2c02e083d03c4c675351022b267722c4cc6589c7836e9SM3-PHP:b7a0c84f86acd90f41f09d791735baf07ddf8acae6349319f5ab71c375fa37cb openssl time:4.755973815918ms one-sm3 time:5.5310726165771msSM3-PHP time:708.27698707581ms

测试代码bench.php:

https://github.com/lizhichao/sm/blob/master/bench.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供算法SM2的签名和验证签名示例。以下是示例代码: 签名示例(使用Java语言): ```java import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.CryptoException; import org.bouncycastle.crypto.digests.SM3Digest; import org.bouncycastle.crypto.engines.SM2Engine; import org.bouncycastle.crypto.generators.ECKeyPairGenerator; import org.bouncycastle.crypto.params.*; import org.bouncycastle.crypto.signers.SM2Signer; import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.math.BigInteger; import java.security.*; import java.security.spec.ECGenParameterSpec; public class SM2SignatureExample { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); try { // 生成钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("sm2p256v1"); keyPairGenerator.initialize(ecGenParameterSpec, new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 获取私钥和公钥 PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); // 待签名的数据 byte[] data = "Hello, SM2!".getBytes(); // 执行签名操作 SM2Signer signer = new SM2Signer(); signer.init(true, new ParametersWithRandom(privateKey, new SecureRandom())); signer.update(data, 0, data.length); byte[] signature = signer.generateSignature(); System.out.println("签名值: " + new BigInteger(1,

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值