文章目录
前言
在涉及到身份验证和机密数据的传输时,敏感数据明文传输本身是具有极大风险被泄露的。即使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<

&spm=1001.2101.3001.5002&articleId=147731682&d=1&t=3&u=88bf4102871b4600b616995c23a93e90)
152

被折叠的 条评论
为什么被折叠?



