1

我在寻找 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...."

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

什么方法更好?

4

1 回答 1

0

回答你的第一个问题。虽然它看起来像是在生成汉字,但实际上它正在将字节数组转换为 unicode。在 c# 中,通常当您想要存储一个字节数组时,您会将其转换为 base64,这是您的第二个示例似乎返回的内容。

你的第一个例子会变成这样:

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

至于推荐什么,最常见的是使用base64。人们使用 base64 而不是 unicode 或 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

于 2013-09-18T04:38:41.073 回答