C# RSA加密解密,对字符串长度没有限制

2021/4/29 20:28:48

本文主要是介绍C# RSA加密解密,对字符串长度没有限制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

RSA生成公钥和私钥

public void getKey()
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
using (StreamWriter writer = new StreamWriter("G://PrivateKey.xml"))
{
writer.WriteLine(rsa.ToXmlString(true));
}
using (StreamWriter writer = new StreamWriter("G://PublicKey.xml"))
{
writer.WriteLine(rsa.ToXmlString(false));
}
}

该方法是获取密钥,其作用就是生成公钥和私钥的文件,文件中的内容就是公钥和私钥。一般而言,公钥是用来加密的,而私钥是用来解密的,所以公钥对方公司可以给我们公司,我们将内容通过公司提供的公钥进行加密,然后把加密内容传给对方公司,对方通过对应的私钥进行解密就好了,所以公钥一般可以透露,但是私钥最好不要透露。

RSA加密

public string Encrypt(string str, string key)
{
using (var rsaProvider = new RSACryptoServiceProvider())
{
var inputBytes = Encoding.UTF8.GetBytes(str);
rsaProvider.FromXmlString(key);
int bufferSize = (rsaProvider.KeySize / 8) - 11;
var buffer = new byte[bufferSize];
using (MemoryStream inputStream = new MemoryStream(inputBytes),
outputStream = new MemoryStream())
{
while (true)
{
int readSize = inputStream.Read(buffer, 0, bufferSize);
if (readSize <= 0)
{
break;
}

var temp = new byte[readSize];
Array.Copy(buffer, 0, temp, 0, readSize);
var encryptedBytes = rsaProvider.Encrypt(temp, false);
outputStream.Write(encryptedBytes, 0, encryptedBytes.Length);
}
return Convert.ToBase64String(outputStream.ToArray());
}
}
}

RSA解密

public string Decrypt(string str, string key)
{
using (var rsaProvider = new RSACryptoServiceProvider())
{
var inputBytes = Convert.FromBase64String(str);
rsaProvider.FromXmlString(key);
int bufferSize = rsaProvider.KeySize / 8;
var buffer = new byte[bufferSize];
using (MemoryStream inputStream = new MemoryStream(inputBytes),
outputStream = new MemoryStream())
{
while (true)
{
int readSize = inputStream.Read(buffer, 0, bufferSize);
if (readSize <= 0)
{
break;
}
var temp = new byte[readSize];
Array.Copy(buffer, 0, temp, 0, readSize);
var rawBytes = rsaProvider.Decrypt(temp, false);
outputStream.Write(rawBytes, 0, rawBytes.Length);
}
return Encoding.UTF8.GetString(outputStream.ToArray());
}
}
}

小编参考了很多,但是最开始不是出现这个问题就是出现那个问题,经常是字符串内容超过了长度啊,还有有时可行有时不可行的,最后新来的同事给了我这个方法,我才一路畅通无阻,比我大了两岁真的还是很牛啊,不过也提醒了自己基础很重要,否则自己和对方公司交接的时候恐怕自己都不知道怎么完成此类的思路和逻辑。
————————————————
版权声明:本文为CSDN博主「太阳的后裔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43942765/article/details/109889797



这篇关于C# RSA加密解密,对字符串长度没有限制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程