loy*_*low 1 c# encoding cryptography rsa
我正在使用UTF8转换加密文本,但结果字符串包含我无法阅读的有趣字符,不确定是否可以将此文本发送到浏览器.
string message = "hello world";
var rsa = new RSACryptoServiceProvider(2048);
var c = new UTF8Encoding();
byte[] dataToEncrypt = c.GetBytes(message);
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false);
string output = c.GetString(encryptedData);
Console.WriteLine(output);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
当我运行上面的内容时,我得到以下内容:
?VJI????J/;?>?:<?M????g?1?7?A.@?`J?s??~??)?Fn?????5?.???o???????jH3;G?<<??F????~??Y?#???j???6l{{?Y?$?]???nylz???X8u?\f?V1/?$?n+?\b??\b?fsAh?G\n?\t???\b???6?3????????4??@?hI???'\0? T?n??|E?^7ú l??T\\!?w???QRWA%p??V\f??5?
Run Code Online (Sandbox Code Playgroud)
我需要将此文本发送回浏览器,或将其保存到文件中,目前我不知道为什么我会收到这些字符?
问题是你正在获取一个不是通过编码文本创建的字节数组,并像使用它一样使用它.您只能解码通过编码创建的数据,如果您解码任何数据,最终会产生垃圾.
如果您希望加密产生的二进制数据为字符串,请使用例如base64编码:
string output = Convert.ToBase64String(encryptedData);
Run Code Online (Sandbox Code Playgroud)
如果要解密数据,请使用Convert.FromBase64String以获取字节数组,对其进行解密,然后使用Encoding.UTF8.GetString它将其转换回原始字符串.在那里它将解析数据,因为它是从一开始就对字符串进行编码而创建的.