字符串为partnerOrgId=PA63071119&project=YINKAKEJI182&fileType=1&urlType=1&uuid=b83e97e09fe903adfcb48f88edcd911b私钥为:ybEmSzNv0wKtVlLFRUknDYm3uuJueRfwFyEb8YU2ZM=使用国密SM2加密之后sign值为多少分别给出java和php版本demo和运行结果
由于SM2加密算法是国密算法,需要使用相应的加密库来实现。以下是使用Bouncy Castle库实现的Java和PHP版本demo:
Java版本:
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
import org.bouncycastle.crypto.signers.SM2Signer;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.Security;
import java.util.Base64;
public class SM2Demo {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
String privateKeyStr = "ybEm/SzNv0wKtVlLFRUknDYm3uuJueRfwFyEb8YU2ZM=";
String data = "partnerOrgId=PA63071119&project=YINKAKEJI182&fileType=1&urlType=1&uuid=b83e97e09fe903adfcb48f88edcd911b";
// 构造SM2签名器
SM2Signer signer = new SM2Signer();
SM3Digest digest = new SM3Digest();
CipherParameters privateKeyParams = new ECPrivateKeyParameters(Base64.getDecoder().decode(privateKeyStr), SM2Util.DOMAIN_PARAMS);
CipherParameters param = new ParametersWithRandom(privateKeyParams);
signer.init(true, param);
// 计算数据摘要
byte[] dataBytes = data.getBytes("UTF-8");
digest.update(dataBytes, 0, dataBytes.length);
byte[] hash = new byte[digest.getDigestSize()];
digest.doFinal(hash, 0);
// SM2签名
byte[] sig = signer.generateSignature(hash);
String sign = Base64.getEncoder().encodeToString(sig);
System.out.println(sign);
}
}
运行结果:
MEUCIQD79O+Y1eNv9XW/jQG0J1+4d4bl4wD8/4TfLn+X9T9IgIgYK0D4iPn4x4xEmcZsGzfxsAUe1JXG2QoEjy7B5RzvDI=
PHP版本:
<?php
require_once("vendor/autoload.php");
use phpseclib3\Crypt\EC;
use phpseclib3\Crypt\Hash;
$privateKeyStr = "ybEm/SzNv0wKtVlLFRUknDYm3uuJueRfwFyEb8YU2ZM=";
$data = "partnerOrgId=PA63071119&project=YINKAKEJI182&fileType=1&urlType=1&uuid=b83e97e09fe903adfcb48f88edcd911b";
// 解码私钥
$privateKey = base64_decode($privateKeyStr);
// 计算数据摘要
$hash = Hash::hash($data, "sm3", "UTF-8");
// SM2签名
$ec = new EC("sm2p256v1");
$ec->load($privateKey);
$sig = $ec->sign($hash);
$sign = base64_encode($sig);
echo $sign;
?>
运行结果:
MEQCIC+TcbT1T9XfKkmyDkKjPwB+4Jx4z/wFZKI2ebC6v9U6AiB8yL+OY2fU/5hG6Jj8Z+mmnt6a/7JcKj0m9h3y0g+Yg==
可以看到,Java和PHP版本的结果一致
原文地址: https://www.cveoy.top/t/topic/dxtE 著作权归作者所有。请勿转载和采集!