EC版国密SM2私钥解析C#.NET
EC版国密SM2私钥解析C#.NET , ECC
先看下私钥和公钥内容。
开发者私钥:
-----BEGIN EC PRIVATE KEY----- MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgHqOp471SMDsQml2G 2ErpZPLD2X7rbMqa6P1O9Zqlhe+gCgYIKoEcz1UBgi2hRANCAAQkmEWaN4xGn0bB KHG1a6e/pafL/+YODalye7SWUNC8hijk7dH5qXf016RyJnQEitPbVj9AmteAkijI GvpJOaXq -----END EC PRIVATE KEY-----
平台公钥:
-----BEGIN PUBLIC KEY----- MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////// //////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA //////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSu LB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmH fMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEj AgEBA0IABKZ3VWwH0Aw9xvOWXb+xM2gXyApWEAZLFy8UyIigp3ehOTwPJ693njrg NavTLdzAtFBqXRreivlwBTIFy8iRgn8= -----END PUBLIC KEY-----
文本是PEM格式的,私钥头包含“BEGIN EC PRIVATE”

首先在nuget里下载 BouncyCastle 1.8.9 版本。

如果是.NET CORE 可以用 Portable.BouncyCastle 或 BouncyCastle.Cryptography,平替。

控制台解析代码:
using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleECsm2 { internal class Program { static void Main(string[] args) { try { string mchPrivateKeyBase64 = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "开发者私钥.txt")); mchPrivateKeyBase64 = mchPrivateKeyBase64.Replace("-----BEGIN EC PRIVATE KEY-----", "").Replace("-----END EC PRIVATE KEY-----", ""); string platPubKeyBase64 = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "平台公钥.txt")); platPubKeyBase64 = platPubKeyBase64.Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", ""); AsymmetricKeyParameter mchPrivateKey = PrivateKeyFactory.CreateKey(Convert.FromBase64String(mchPrivateKeyBase64)); if (mchPrivateKey != null) { Console.WriteLine("私钥正常:"); } AsymmetricKeyParameter platPubKeyObj = PublicKeyFactory.CreateKey(Convert.FromBase64String(platPubKeyBase64)); if (platPubKeyObj != null) { Console.WriteLine("公钥正常:"); } } catch (Exception ex) { Console.WriteLine("ex:" + ex.Message); } Console.ReadKey(); } } }
运行效果:

最终,我们拿到“AsymmetricKeyParameter mchPrivateKey”、“AsymmetricKeyParameter platPubKeyObj” 这2个对象之后,就可以签名或加密了。

注意:
PEM文本里包含"-----BEGIN EC PRIVATE KEY-----"等字样,要replace掉。

-

浙公网安备 33010602011771号