菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

net core 配置文件加密(RSA加密)

7563人阅读 2023/4/7 13:44 总访问:958066 评论:0 收藏:0 手机
分类: .net core

前言

在配置文件中,数据库连接字符串,缓存链接字符串等敏感信息,需要配置成加密形式。今天记录一下工作经验

我使用的是RSA加密
先安装依赖包

首先生成公钥私钥

公钥与私钥是匹配的,公钥加密过后使用对应的私钥进行解密

  1.         /// <summary>
  2.         /// 生成PEM格式的公钥和密钥
  3.         /// </summary>
  4.         /// <param name="strength">长度</param>
  5.         /// <returns>Item1:公钥;Item2:私钥;</returns>
  6.         public static (stringstringCreateKeyPair(int strength = 1024)
  7.         {
  8.             RsaKeyPairGenerator r = new RsaKeyPairGenerator();
  9.             r.Init(new KeyGenerationParameters(new SecureRandom(), strength));
  10.             AsymmetricCipherKeyPair keys = r.GenerateKeyPair();
  11.             TextWriter privateTextWriter = new StringWriter();
  12.             PemWriter privatePemWriter = new PemWriter(privateTextWriter);
  13.             privatePemWriter.WriteObject(keys.Private);
  14.             privatePemWriter.Writer.Flush();
  15.             TextWriter publicTextWriter = new StringWriter();
  16.             PemWriter publicPemWriter = new PemWriter(publicTextWriter);
  17.             publicPemWriter.WriteObject(keys.Public);
  18.             publicPemWriter.Writer.Flush();
  19.             return (publicTextWriter.ToString(), privateTextWriter.ToString());
  20.         }

RSA加密算法

  1.                 /// <summary>
  2.                 /// RSA加密
  3.                 /// </summary>
  4.                 /// <param name="publicKey">公钥</param>
  5.                 /// <param name="decryptstring">待加密的字符串(Base64)</param>
  6.                 /// <returns>加密后的字符串</returns>
  7.                public static string Crypt(string publicKey, string decryptstring)
  8.                {
  9.                     decryptstring = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(decryptstring));
  10.                   using (TextReader reader = new StringReader(publicKey))
  11.                  {
  12.                      dynamic key = new PemReader(reader).ReadObject();
  13.                      var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());
  14.                      if (key is AsymmetricKeyParameter)
  15.                      {
  16.                         key = (AsymmetricKeyParameter)key;
  17.                      }
  18.                      else if (key is AsymmetricCipherKeyPair)
  19.                      {
  20.                         key = ((AsymmetricCipherKeyPair)key).Private;
  21.                      }
  22.                      rsaDecrypt.Init(true, key); //这里加密是true;解密是false
  23.                      byte[] entData = Convert.FromBase64String(decryptstring);
  24.                      entData = rsaDecrypt.ProcessBlock(entData, 0, entData.Length);
  25.                      return Convert.ToBase64String(entData);
  26.                  }
  27.               }

RSA解密算法

  1.         /// <summary>
  2.         /// RSA解密,解密失败返回原字符串
  3.         /// </summary>
  4.         /// <param name="privateKey">私钥</param>
  5.         /// <param name="decryptstring">待解密的字符串(Base64)</param>
  6.         /// <returns>解密后的字符串</returns>
  7.         public static string Decrypt(string privateKey, string decryptstring)
  8.         {
  9.             try
  10.             {
  11.                 using (TextReader reader = new StringReader(privateKey))
  12.                 {
  13.                     dynamic key = new PemReader(reader).ReadObject();
  14.                     var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());
  15.                     if (key is AsymmetricKeyParameter)
  16.                     {
  17.                         key = (AsymmetricKeyParameter)key;
  18.                     }
  19.                     else if (key is AsymmetricCipherKeyPair)
  20.                     {
  21.                         key = ((AsymmetricCipherKeyPair)key).Private;
  22.                     }
  23.                     rsaDecrypt.Init(false, key); //这里加密是true;解密是false
  24.                     byte[] entData = Convert.FromBase64String(decryptstring);
  25.                     entData = rsaDecrypt.ProcessBlock(entData, 0, entData.Length);
  26.                     return Encoding.UTF8.GetString(entData);
  27.                 } 
  28.             }
  29.             catch (Exception e)
  30.             {
  31.                 return decryptstring;
  32.             }
  33.         }


评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

net core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core中使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...

net core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...