C#中SM2加解密
public class Sm2: IDecryption { private readonly string _privateKey; private readonly Encoding _encoding; private readonly string _publickey; public Sm2(string privateKey,string publickey,Encoding encoding) { _privateKey = privateKey; _publickey = publickey; _encoding = encoding; } public static AlgKeyPair CreateKeyPair(Encoding encoding) { var keyPair = SM2.Instance.ecc_key_pair_generator.GenerateKeyPair(); var privateKeyParameters = (ECPrivateKeyParameters)keyPair.Private; var publicKeyParameters = (ECPublicKeyParameters)keyPair.Public; var d = privateKeyParameters.D; return new AlgKeyPair(encoding.GetString(Hex.Encode(publicKeyParameters.Q.GetEncoded())).ToUpper(), encoding.GetString(Hex.Encode(d.ToByteArray())).ToUpper()); } /// <summary> /// 解密 /// </summary> /// <param name="ciphertext"></param> /// <returns></returns> public string Decrypt(string ciphertext) { return _encoding.GetString(SM2Utils.Decrypt(Hex.Decode(_privateKey), (Hex.Decode(ciphertext)))); } /// <summary> /// 加密 /// </summary> /// <param name="ciphertext"></param> /// <returns></returns> public string Encrypt(string ciphertext) { return (SM2Utils.Encrypt(Hex.Decode(_publickey), (_encoding.GetBytes(ciphertext)))); } private byte[] ChangeC1C3C2ToC1C2C3(byte[] data) { const int c1Len = 65; const int c3Len = 32; var result = new byte[data.Length]; Array.Copy(data, 0, result, 0, c1Len); Array.Copy(data, c1Len + c3Len, result, c1Len, data.Length - c1Len - c3Len); Array.Copy(data, c1Len, result, data.Length - c3Len, c3Len); return result; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)