C#加签java验签Sm2
时间: 2023-12-13 12:33:23 浏览: 163
国密SM4加解密SM2签名验签for delphi等语言.rar
5星 · 资源好评率100%
以下是C#加签Java验签SM2的示例代码:
C#加签示例代码:
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
namespace SM2Demo
{
class Program
{
static void Main(string[] args)
{
// 待签名的数据
string data = "Hello World!";
// 加载SM2证书
CngKey key = CngKey.Open("SM2Test");
// 创建SM2签名对象
ECDsaCng sm2 = new ECDsaCng(key);
// 计算签名
byte[] signature = sm2.SignData(Encoding.UTF8.GetBytes(data));
// 输出签名结果
Console.WriteLine("Signature: " + Convert.ToBase64String(signature));
}
}
}
```
Java验签示例代码:
```java
import java.security.*;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class SM2Demo {
public static void main(String[] args) throws Exception {
// 待验签的数据
String data = "Hello World!";
// 加载SM2证书
KeyFactory keyFactory = KeyFactory.getInstance("EC");
byte[] privateKeyBytes = Base64.getDecoder().decode("MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgJzvJZJZJ5zJzJZJ5\n" +
"zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ\n" +
"5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ\n" +
"5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJw==");
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
byte[] publicKeyBytes = Base64.getDecoder().decode("MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DfQADZGk+JzJZJ5zJzJZJ5zJzJZJ5zJzJ\n" +
"ZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJ\n" +
"ZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJ\n" +
"ZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJw==");
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
// 创建SM2验签对象
Signature signature = Signature.getInstance("SM3withSM2");
signature.initVerify(publicKey);
// 验证签名
byte[] signatureBytes = Base64.getDecoder().decode("MEUCIQDQJzvJZJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJgIgQJzvJZJZJ5zJz\n" +
"JZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJz\n" +
"JZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJw==");
signature.update(data.getBytes());
boolean result = signature.verify(signatureBytes);
// 输出验签结果
System.out.println("Verify result: " + result);
}
}
```
阅读全文