.net core RSA加密解密


使用類庫:“BouncyCastle.NetCore”(.Net FrameWork使用“BouncyCastle”)

/// <summary>
/// 生成PEM格式的公鑰和密鑰
/// </summary>
/// <param name="strength">長度</param>
/// <returns>Item1:公鑰;Item2:私鑰;</returns>
public static (string, string) CreateKeyPair(int strength = 1024)
{
RsaKeyPairGenerator r = new RsaKeyPairGenerator();
r.Init(new KeyGenerationParameters(new SecureRandom(), strength));
AsymmetricCipherKeyPair keys = r.GenerateKeyPair();

TextWriter privateTextWriter = new StringWriter();
PemWriter privatePemWriter = new PemWriter(privateTextWriter);
privatePemWriter.WriteObject(keys.Private);
privatePemWriter.Writer.Flush();


TextWriter publicTextWriter = new StringWriter();
PemWriter publicPemWriter = new PemWriter(publicTextWriter);
publicPemWriter.WriteObject(keys.Public);
publicPemWriter.Writer.Flush();


return (publicTextWriter.ToString(), privateTextWriter.ToString());
}

/// <summary>
/// RSA解密
/// </summary>
/// <param name="privateKey">私鑰</param>
/// <param name="decryptstring">待解密的字符串(Base64)</param>
/// <returns>解密后的字符串</returns>
public static string Decrypt(string privateKey, string decryptstring)
{
using (TextReader reader = new StringReader(privateKey))
{
dynamic key = new PemReader(reader).ReadObject();
var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());
if (key is AsymmetricKeyParameter)
{
key = (AsymmetricKeyParameter)key;
}
else if (key is AsymmetricCipherKeyPair)
{
key = ((AsymmetricCipherKeyPair)key).Private;
}
rsaDecrypt.Init(false, key); //這里加密是true;解密是false

byte[] entData = Convert.FromBase64String(decryptstring);
entData = rsaDecrypt.ProcessBlock(entData, 0, entData.Length);
return Encoding.UTF8.GetString(entData);
}
}

 

如果想私鑰加密,公鑰解密可以引用類庫:“BouncyCastle.Crypto”,參考地址如下:
https://www.cnblogs.com/dj258/p/6049786.html

前端

前端引用jsencrypt.js

 

function RSAEncryption(key, encryptstring) { //rsa加密隨機密鑰 var rsa = new JSEncrypt(); //設置后端接口傳回的公鑰(無需對公鑰字符串做任何處理) rsa.setPublicKey(key); //注意:RSA加解密有大小限制(最多117 bytes) var rsaEncrypted = rsa.encrypt(encryptstring); //已加密的字符串(Base64) return rsaEncrypted; }

PEM格式存在換行,因此建議把公鑰放在隱藏域中:
<input id="encryption" name="encryption" type="hidden" value="@ViewData["publicKey"]">
原文地址:https://www.cnblogs.com/NBDWDYS2214143926/p/13329231.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM