赞
踩
SM2算法是中国国家密码局推出的国产化算法,是基于椭圆曲线的非对称算法,相对于RSA算法,SM2具有密钥更小,运算速度更快,相同密钥长度下具有更高安全性等优势。
通常以前缀04开头,后跟两个256位数字;一个用于点的x坐标,另一个用于点的y坐标。前缀04用于区分未压缩的公共密钥和以02或03开头的压缩公共密钥
即04||x||y
首先创建一个Winfrom的项目
在NuGet包里面添加两个动态库,注意的是动态库的版本号
SM2Util.cs类
public class SM2Util
{
/**
* 生成SM2秘钥对
* string[0] 公钥
* string[1] 私钥
*/
public static string[] GenerateKeyPair()
{
return SM2.GenerateKeyPair();
}
/**
* SM2签名
* data 签名的数据
* priKey 私钥
*/
public static string Sign(string data, string priKey)
{
SM2 sm2 = new SM2(priKey, null);
return sm2.Sign(data);
}
/**
* SM2签名
* sign 源数据
* pubKey 公钥
* sign 签名的数据
*/
public static bool verifySign(string msg, string pubKey, string sign)
{
SM2 sm2 = new SM2(null, pubKey);
return sm2.verifySign(msg, sign);
}
/**
* 加密
* 返回Base64字符串
* 公钥加密
* plainText 要加密的文本
* pubKey 公钥
*/
public static string encryptBase64(string plainText, string pubKey)
{
SM2 sm2 = new SM2(null, pubKey);
byte[] encryptByte = sm2.encrypt(Encoding.UTF8.GetBytes(plainText));
return Base64.ToBase64String(encryptByte);
}
/**
* 解密
* 私钥解密
* plainText 要加密的文本
* pubKey 公钥
*/
public static string decryptBase64(string plainText, string priKey)
{
SM2 sm2 = new SM2(priKey, null);
byte[] deCode = Base64.Decode(plainText);
byte[] decryptText = sm2.deceypt(deCode);
return Encoding.UTF8.GetString(decryptText);
}
}
From1.Designer.cs
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button4 = new System.Windows.Forms.Button();
this.textBox8 = new System.Windows.Forms.TextBox();
this.textBox7 = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.textBox5 = new System.Windows.Forms.TextBox();
this.textBox6 = new System.Windows.Forms.TextBox();
this.butt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。