1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > NetCore 生成RSA公私钥对 公钥加密私钥解密 私钥加密公钥解密

NetCore 生成RSA公私钥对 公钥加密私钥解密 私钥加密公钥解密

时间:2020-07-24 10:54:02

相关推荐

NetCore 生成RSA公私钥对 公钥加密私钥解密 私钥加密公钥解密

NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密

using Newtonsoft.Json;using Org.BouncyCastle.Crypto;using Org.BouncyCastle.Crypto.Encodings;using Org.BouncyCastle.Crypto.Engines;using Org.BouncyCastle.Crypto.Generators;using Org.BouncyCastle.OpenSsl;using Org.BouncyCastle.Pkcs;using Org.BouncyCastle.Security;using Org.BouncyCastle.X509;using System;using System.IO;using System.Text;namespace ConsoleAppTest{class Program{//自己生成static string _publicKeyString = @"-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmu5B+WIU9ZK+uy11qmdjKygwcH6r8YOui2jc87pWShKAEnEE2Q81twgQ4KGFylodpNsXs+EGeQA8HUiDKK11Pm6AMzrqHQ8rtNNWbQA6Ca+BJJHEoyrizaHTGLWU7oHe9TcRQ8Iq5vihF74x1jD2BHXpgR6KUhx9DUMFgdwpLXhZ2EgG85eOuajcHl+tLN52bEpGwSHyL5iWuX2U5qfNLn3h/lCmdktPwCjVVyaoLALxP0oDtalRwLKRJuD91p6YxrAeN3eRkGWoYXH5bSrSBR+5id5yBplxayVrozJXFpOFySTrCHD2snnfjmn39dKsRjwRjKG/zKUPO54GPovvrODK32c1xiKpQQ7XAzyXPNij3MWPJFu6z24eNdILm4wF1jFWQlrsca0znpjoAVFYe1yp1lXAtYlxgNURMQ2RwvBtnT3BUhUP382GYd0XPdV1xodOaJVf8ce3YImrGaAYjPjbTPTbTyzwcHyc1LHwYw4W7aYiTyX8p5+7PkdkRr8uiKA9iFhH6iq+7MPv5O0FNGSktGZkyFSKg9vazQmESlUC+blC2yQRBJsqV84weMKGCURg3jxetTfENHJ8N+H9pnacvRjl5O5cZjECOi4XrGAUd4bvqKBfZ1OnB1htWGEjPyGhKzmAG8vzf0GVtAK88qhuYM7FceTYJsqUnzFnEHUCAwEAAQ==-----END PUBLIC KEY-----";static string _privateKeyString = @"-----BEGIN RSA PRIVATE KEY-----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-----END RSA PRIVATE KEY-----";//网站生成static string _publicKeyStringWeb = @"-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPNZe67AfIs2rFWLp5HZ6y8VG/ybhhE0Q9WmkdnPXFGSN9j3M8Uglmh78MCfawm9goHnvMl5c8ta2dDnKZi+WWuZ6DK+OOS/kBgR9cLMci+9bI7NA8/spxbVBbKDlgyRWPle65Nm7foX3OamNJe6uoMaLLY/jWSdwxPsp1jp8GJwIDAQAB-----END PUBLIC KEY-----";static string _privateKeyStringWeb = @"-----BEGIN RSA PRIVATE KEY-----Proc-Type: 4,ENCRYPTEDDEK-Info: DES-EDE3-CBC,EF30E5A772A723B58DS2obJNGC9M2GJuxID6mZV5p4k+oxgv1fEILJ+CwpzJ0lAGspDiqLgxSKmETZiEct9zCkEEABTarhBspC1i4O4np4nO+z40iTvDwu88bDMvWvEV2EYYaJn9ZelJZ51yKHEJw4fncvZN8ULNBZ7Fnn9Y6+pLW6IJrSHTL7TrN1gi257LAX5xUgHvNqet4XMlUKoX0DmDZkCFdnn3a/DQUA4au8rrotsU/ihBDFMMGljA/QKPApnuy07+KyXtaDx6YlBMifqbsuYLOvNMT9aqbAPp5OFdykTnfPRPnx9xHuTqXE8NfInYvSMkcC8lpUrtM8wsCVaRukliBOSyNYxyqMZwBJMXrY9+lyZMi6/g6450HJ0NBOC8/mc5Gj8nD6L6tjkkFyS/t4aU7lZWqh4oMRHPwDQqrgSZB13lBveXVSoTpVOzvgV2vEC6p9s+IGIC+WpNRq55zWtj8EsZly/p91NlrHujDQsEyrkUDUE3xjon66vQow9jRwYngA0VWeL8dO9XN/srJ4jQB4I/wx9X7MfDJzVF/RrHT42QVfeqsPx071TJAd3+GqJS0+B1FaS8PoTCY4yor2ViTOS/NfZEs0SyC1U9t41FTIEnfnZVqEF54Hy3l8kCrTjVc2Vm2HAG/DAzGgbdOV8KJKdWFpc5+aQde5j2xxd4LwF8kKTSLaRonVMhBJ4LBLPn9NsdU7vwMyFyLnHb4qsilAC3P2Ui8MJP2kJsqO1ho3V9ITG8IzxiZmpLLL1D8GAJoaDtDxhuMtQZQpgpuW7CaVItZrxrmBbdMXpGW/GkOhySZVI0au04GfPHQtssAQ==-----END RSA PRIVATE KEY-----";static string _encryptedWithPublicStr = @"N+sAvcN+AveMeY1oehXHNMj4PAlLhNRSXgUrcTXLlOlezFyM2UwvSEXNchVs0r5aMYgn2gAX1ofOkXGzywvoaju2qDjcdZIV4WYlhR6RI0PEueootTRnQoJCNKnOaCQ2YZsXys5crm6xRMsFM7QcKKxjUWeg41Q8u5pjZOM3PtdoF+AZwweieNEJrWSsvGAKXfDol9R5fCJ2s51G5/6q+3U9wR8kWcZl7cpmdSJUWg2GSHcKVda6cJ2Ojr44wDLfiBTUz72dzDlZHJowHQc3s8+GYx6rIYQyghxYdiHfDPtQdOtPxdKaJajk+bJOyuEicYuW0j7CwV/+zD7XPoDkoNMbp6oikCBmU1d+zmWsfg4lySwPe++2irjJmCLaOeRHzvXdkfnUhWCzjfxPGSEE+feSMEvDbTAvXbhvtC7zguJBpy2eyQM+n0wtkXrsYOxBldVOT3M1CAKHEdBecoV7xxLPlrpnxpgf2jsWMdfRwXYVpaXacVQuAwe8MLCexlLEPusAAFMnp3DpBO4gbCQCRoAKJTN7MyJfKmeOLAKHR6M+NuO5+AZ2Z2sj06u9SNcYuKm5Jgl3NIDzTrVfNbFjaDqFLzWpHiv1JS20D21gUocycDAVLw09U3aAz5KzBpbPQ2knqslgnBi1116xKzCOEhqB6mMNuoVPrDUr2eIFuns=";static string _encryptedWithPrivateStr = @"dkOvosyTPPOrAglholTHEqu/RoyQv1Ih7qy/SsuxjoO92ZpL4alNhso6snPyooZmOBP/ljb91BEXaaqqaLneYzvlvEAqJPKXyOvYFREhcwLXCE9dIbn0NPs7srRETd0JqeQFyRv6qGvoA2aXg4Fxch7cANqpKY03eb3htuqTTranAZsPT3SYZPKOxK4wgfU/63wDBCWEO0SeNga86QgLpfcQ0DRukqNVr64lDt2QddUqeKxbnAJM2u2xpwnGayFDKP03BjV6rXnId7NlkgkoqZw3SpyOg5HOe/4tTbRQ4gjH6N5Q4VnyFGehOw3SH/KNWT/KaE2anI9vWCZHy0ia8mxiBKH0vuJl3WEoR1JPFmhSrbcemrWpgc0a8r6CJQRMefYw18z3AuHRu3vAOPEtS9bXaySpQ0PLjS/pxG3Y1MTZLQPBvCcY77Ghr35UNJ2Z8XIbiwt9dqs0Az7y6ARj2qyz+96ZQkstrDJw4OikZj0w6olHoL9WQ2b04S7wz6GE87/5AS3hphZJNwFpvHxaUWTRYf+N2r9GrjM3nplYqBAQwz1XI65qhQL4PBK7/4HTgkVBDNRsJNHOJp5Uq4+UtZYwgwLOjxhBG5dlLJMCbZvABqE8e4gRLDv8wfBiC8qS4CxhOz3HuxW+KdZFkEG9Qajf/hxEzwUoxf+mLagdp1U=";static string _encryptedWithPublicWebStr = @"KRC9OJ3R981IsvBJ33Z9eDJHgg5+EOcnh95yZA1HDPeOnn7+s7n7TH4yyIOVAS677bESftzcNfhyCCrDVb7GkRBTu3UgMlkl/KlkC4a8yS2skks5TwYkjPmr2I31PCZzg9JuH0eo3S4oXzqg9NVhgW37kUgRjjbH489XFYeUQEM=";static string _encryptedWithPrivateWebStr = @"i8lGOft4QH781r5+GUuzp3zEjmmpyw3N7qjj6wKH6LRjxzzCwxJqyewztmosrO9aJt/0LEew5wMSt/xWjrHNiaiAdxnI0UX7i7TZWNASXe1Sie/+36egYfu5x4BctIh2NPP3c6HixVJzQ2I5vtuKK2UPEw8yu5kH3p7+Ifp7CbU=";static void Main(string[] args){Console.WriteLine("Hello World!");//var jsonStr = JsonConvert.SerializeObject(new Test { Name = "塞尔达荒野之息" });//var jsonByte = Convert.ToByte(jsonStr);//Console.WriteLine(jsonStr);//GenRSAKeyPair("xjl");//RsaEncryptWithPublic("yahaha");//RsaEncryptWithPrivate("link");string encryptedTxt = RsaEncryptWithPublic(new Test { Name = "喷射战士2haha" });//RsaDecryptWithPrivate(_encryptedWithPublicStr);RsaDecryptWithPrivate(encryptedTxt);//RsaEncryptWithPrivate(new Test { Name = "odessey" });//RsaDecryptWithPublic(_encryptedWithPrivateStr);Console.ReadLine();}public static void GenRSAKeyPair(string name){var generator = new RsaKeyPairGenerator();var seed = Encoding.UTF8.GetBytes(name);var secureRandom = new SecureRandom();secureRandom.SetSeed(seed);generator.Init(new KeyGenerationParameters(secureRandom, 4096));var pair = generator.GenerateKeyPair();//第一种方案//var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);//var serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();//var serializedPrivate = Convert.ToBase64String(serializedPrivateBytes);//Console.WriteLine("Private Key:" + serializedPrivate);//var publickKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);//var serializedPublicBytes = publickKeyInfo.ToAsn1Object().GetDerEncoded();//var serializedPublic = Convert.ToBase64String(serializedPublicBytes);//Console.WriteLine("Public Key:" + serializedPublic);//第二种方案var twPrivate = new StringWriter();PemWriter pwPrivate = new PemWriter(twPrivate);pwPrivate.WriteObject(pair.Private);pwPrivate.Writer.Flush();var privateKey = twPrivate.ToString();Console.WriteLine("Private Key:" + privateKey);var twPublic = new StringWriter();PemWriter pwPublic = new PemWriter(twPublic);pwPublic.WriteObject(pair.Public);pwPublic.Writer.Flush();var publicKey = twPublic.ToString();Console.WriteLine("Public Key:" + publicKey);}/// <summary>/// 公钥加密/// </summary>/// <param name="dataToEncrypt">待加密文本</param>//public static void RsaEncryptWithPublic(string dataToEncrypt)public static string RsaEncryptWithPublic(Test dataToEncrypt){var bytesToEncrypt = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dataToEncrypt));var encryptEngine = new Pkcs1Encoding(new RsaEngine());using (var txtReader = new StringReader(_publicKeyString)){var keyParameter = (AsymmetricKeyParameter)new PemReader(txtReader).ReadObject();encryptEngine.Init(true, keyParameter);}var encryptedText = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));// 获取publickKey对应的keyParameter的第一种方法//var stringReader = new StringReader(_publicKeyString);//var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(stringReader);//var keyParameter = (AsymmetricKeyParameter)pemReader.ReadObject();// 获取publickKey对应的keyparameter的第二种方法//var publicKey = Convert.FromBase64String(_publicKeyString);//var keyParameter = PublicKeyFactory.CreateKey(publicKey);//用公钥加密的第一种方法//var engine = new RsaEngine();//engine.Init(true, keyParamter);//var blockSize = engine.GetInputBlockSize();//return engine.ProcessBlock(data, 0, blockSize);//用公钥加密的第二种方法//IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");//cipher.Init(true, keyParameter);//var encryptedText = Convert.ToBase64String(cipher.DoFinal(bytesToEncrypt));Console.WriteLine("利用公钥加密后的数据:" + encryptedText);return encryptedText;}/// <summary>/// 私钥加密/// </summary>/// <param name="dataToEncrypt">待加密文本</param>//public static void RsaEncryptWithPrivate(string dataToEncrypt)public static void RsaEncryptWithPrivate(Test dataToEncrypt){var bytesToEncrypt = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dataToEncrypt));var encryptEngine = new Pkcs1Encoding(new RsaEngine());using (var txtReader = new StringReader(_privateKeyString)){var keyPair = (AsymmetricCipherKeyPair)new PemReader(txtReader,new PasswordFinder("xjl")).ReadObject();encryptEngine.Init(true, keyPair.Private);}var encryptedText = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));Console.WriteLine("利用私钥加密后的数据:" + encryptedText);}public class Test{public string Name { get; set; }}/// <summary>/// 私钥解密/// </summary>/// <param name="dataToDecrypt">待解密的数据</param>public static void RsaDecryptWithPrivate(string dataToDecrypt){var bytesToDecrypt = Convert.FromBase64String(dataToDecrypt);// 获取privatekey对应的keyparameter的第一种方法var stringReader = new StringReader(_privateKeyString);//var pemReader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(stringReader);var pemReader = new PemReader(stringReader, new PasswordFinder("xjl"));var keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();var keyParameter = keyPair.Private;// 获取privatekey对应的keyparameter的第二种方法//var publicKey = Convert.FromBase64String(_publicKeyString);//var keyParameter = PublicKeyFactory.CreateKey(publicKey);// 用私钥解密的第一种方法//var engine = new RsaEngine();//engine.Init(false, keyParameter);//var blockSize = engine.GetInputBlockSize();//engine.ProcessBlock(dataToDecrypt, 0, blockSize);// 用私钥解密的第二种方法IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");cipher.Init(false, keyParameter);var decipheredBytes = cipher.DoFinal(bytesToDecrypt);var decipheredText = Encoding.UTF8.GetString(decipheredBytes);Console.WriteLine("用私钥解密后的数据:" + decipheredText);}/// <summary>/// 公钥解密/// </summary>/// <param name="dataToDecrypt">待解密的数据</param>public static void RsaDecryptWithPublic(string dataToDecrypt){var bytesToDecrypt = Convert.FromBase64String(dataToDecrypt);// 获取privatekey对应的keyparameter的第一种方法var stringReader = new StringReader(_publicKeyString);//var pemReader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(stringReader);var pemReader = new PemReader(stringReader);var keyParameter = (AsymmetricKeyParameter)pemReader.ReadObject();// 获取privatekey对应的keyparameter的第二种方法//var publicKey = Convert.FromBase64String(_publicKeyString);//var keyParameter = PublicKeyFactory.CreateKey(publicKey);// 用私钥解密的第一种方法//var engine = new RsaEngine();//engine.Init(false, keyParameter);//var blockSize = engine.GetInputBlockSize();//engine.ProcessBlock(dataToDecrypt, 0, blockSize);// 用私钥解密的第二种方法IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");cipher.Init(false, keyParameter);var decipheredBytes = cipher.DoFinal(bytesToDecrypt);var decipheredText = Encoding.UTF8.GetString(decipheredBytes);Console.WriteLine("用公钥解密后的数据:" + decipheredText);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。