• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

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

开发技术 开发技术 2周前 (04-29) 8次浏览

 

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加密解密,对字符串长度没有限制
喜欢 (0)