RSACryptoServiceProvider助手

时间:2013-09-17 23:51:58

标签: c# rsa public-key-encryption

我一直在寻找RSACryptoServiceProvider助手,发现了两种不同的实现

1)http://www.cnblogs.com/WYB/archive/2008/06/19/1225704.html

2)https://github.com/robvolk/Helpers.Net/blob/master/Src/Helpers.Net/EncryptionExtensions.cs

他们两个都在工作

var encryptedBytes = myBytes.RSAEncrypt(publicKey);
System.Text.Encoding.Unicode.GetString(encryptedBytes); 
returns strings like "蹩巷Ӂය馧㾵봽놶徤蕺蓷課Ϝ堲泍썳⁙䃑ക늏...."

myString.EncryptStringUsingXMLFile(publicKey) 
returns strings like "AnvFFT6YpoiAyIFwl+tueZq56Zcb0B7WhBEvz5uWl...."

可能有人可以解释为什么第一个产生中文字符串以及如何改变它?

哪种方法更好?

1 个答案:

答案 0 :(得分:0)

回答你的第一个问题。虽然它可能看起来像是在生成中文字符但实际上正在发生的是将字节数组转换为unicode。在c#中,通常当你想存储一个字节数组时,你将它转换为base64,这是你的第二个例子似乎返回的。

你的第一个例子就是这样:

var encryptedBytes = myBytes.RSAEncrypt(publicKey);
Convert.ToBase64String(encryptedBytes) // this line changed
returns strings like "AnvFFT6YKpoiAy...."

至于推荐的内容,最常见的是使用base64。人们在unicode上使用base64或在二进制数据中使用UTF-8的原因可以在这些答案中找到:

https://stackoverflow.com/a/201491/701062

MSDN - Convert.ToBase64String(byte [])

http://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.100).aspx

MSDN - Convert.FromBase64String(string) - 如果需要转换回字节数组,则非常有用

http://msdn.microsoft.com/en-us/library/system.convert.frombase64string(v=vs.100).aspx