.NET RSA非对称加密的前后端实现(.NET 8 Web API + 微信小程序)


前言

在涉及到身份验证和机密数据的传输时,敏感数据明文传输本身是具有极大风险被泄露的。即使HTTPS通过SSL/TLS提供了数据传输的加密,当时还是存在明文显示的阶段(到达客户端)。考虑到业务里涉及到的敏感数据,对数据的加密还是有必要的。本文主要介绍RSA加密,详细阐述如何通过代码实现前端(微信小程序)加密,后端(解密)。


一、RSA加密是什么?

RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。由罗纳德・李维斯特(Ron Rivest)、阿迪・萨莫尔(Adi Shamir)和伦纳德・阿德曼(Leonard Adleman)在 1977 年提出。
在这里插入图片描述

RSA 加密的安全性取决于 密钥(公钥 / 私钥)的保护,公钥公开是 RSA 的设计特性,攻击者无法通过公钥反推私钥(依赖大数分解的计算复杂性,目前 2048 位以上密钥难以破解)。私钥是 RSA 安全的核心,一旦泄露,所有基于该密钥的加密、签名都会被破解。

二、后端解密(.NET 8 Web API实现)

2.1 初始化构造函数

将RSA作为一个帮助类(RSAHelper)封装,加密解密分别通过_privateKeyRsaProvider和_publicKeyRsaProvider RSA对象调用服务。公钥和私钥保存在appsettings.json里,实例化的时候传入密钥字符串,并且指定哈希算法和文本编码。

public class RSAHelper
{
   
   
    private readonly RSA _privateKeyRsaProvider;                //私钥创建的RSA对象
    private readonly RSA _publicKeyRsaProvider;                 //公钥创建的RSA对象
    private readonly HashAlgorithmName _hashAlgorithmName;      //指定使用哪种哈希算法
    private readonly Encoding _encoding;                        //指定使用哪种编码
    private readonly string _publicKey;                         //公钥
    private readonly string _privateKey;                        //私钥

	/// <summary>
	/// 实例化RSAHelper
	/// </summary>
	/// <param name="rsaType">加密算法类型 RSA SHA1;RSA2 SHA256 密钥长度至少为2048</param>
	/// <param name="encoding">编码类型</param>
	/// <param name="_RSAkey">RSA密钥字符串对象</param>
	public RSAHelper(RSAType rsaType, Encoding encoding, RSAKey? _RSAkey)
	{
   
   
	    _encoding = encoding;
	    _publicKey = _RSAkey.PublicKey;
	    _privateKey = _RSAkey.PrivateKey;
	    if (!string.IsNullOrEmpty(_privateKey))
	    {
   
   
	        _privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(_privateKey);
	    }
	
	    if (!string.IsNullOrEmpty(_publicKey))
	    {
   
   
	        _publicKeyRsaProvider = CreateRsaProviderFromPublicKey(_publicKey);
	    }
	
	    _hashAlgorithmName = rsaType == RSAType.RSA ? HashAlgorithmName.SHA1 : HashAlgorithmName.SHA256;
	}

	/***********************************************************************************************************/

2.2 使用私钥创建RSA实例

将传入的 Base64 编码的私钥字符串解码为字节数组 privateKeyBits,后续会基于这些字节数据解析 RSA 私钥的各个参数。RSAParameters 这个结构体用于存储 RSA 私钥的各个参数,如模数(Modulus)、指数(Exponent)、私钥指数(D)等。最终返回RSA实例。

public RSA CreateRsaProviderFromPrivateKey(string privateKey)
{
   
   
    var<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值