【问题标题】:Converting Byte[] to String to Byte[] - RSA Encryption C#将 Byte[] 转换为 String 到 Byte[] - RSA 加密 C#
【发布时间】:2012-01-02 23:50:45
【问题描述】:

如果我给解密器RSAalg2.Decrypt(encryptedData, false); 它工作正常,但我需要将加密数据(字节数组)转换为字符串,然后再转换回字节数组。

我尝试了 ASCIIEncoding、UTF-8 而不是 Unicode,但没有成功。我会很感激我能得到的任何帮助。谢谢

UnicodeEncoding ByteConverter = new UnicodeEncoding();

string dataString = "Test";

byte[] dataToEncrypt = ByteConverter.GetBytes(dataString);
byte[] encryptedData;
byte[] decryptedData;

RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();

Console.WriteLine("Original Data: {0}", dataString);

encryptedData = RSAalg.Encrypt(dataToEncrypt, false);

Console.WriteLine("Encrypted Data: {0}", ByteConverter.GetString(encryptedData));

String XML = RSAalg.ToXmlString(true);
XmlDocument doc = new XmlDocument();
doc.LoadXml(XML);
doc.Save(Environment.CurrentDirectory + "\\key.xml");

RSACryptoServiceProvider RSAalg2 = new RSACryptoServiceProvider();

StreamReader sr2 = File.OpenText(Environment.CurrentDirectory + "\\key.xml");
string rsaXml2 = sr2.ReadToEnd();
sr2.Close();

RSAalg2.FromXmlString(rsaXml2);
string s = ByteConverter.GetString(encryptedData);
byte[] se = ByteConverter.GetBytes(s);
decryptedData = RSAalg2.Decrypt(se, false);

Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));

【问题讨论】:

  • 您的问题实际上与 RSA 无关。您使用 UnicodeEncoding 类的方式是正确的,所以问题可能出在其他部分(加密)。
  • '没有运气'不是很具有描述性。也许解释它失败的地方,你得到的任何异常等等。是否需要写入String?如果是,为什么?如果没有,只需使用System.IO.File.WriteAllBytesbyte[] 写入磁盘

标签: c# encryption base64 rsa


【解决方案1】:

下面的代码演示了您所追求的。

    [Test]
    public void RsaEncryptDecryptDemo()
    {
        const string str = "Test";
        var rsa = new RSACryptoServiceProvider();
        var encodedData = rsa.Encrypt(Encoding.UTF8.GetBytes(str), false);

        var encodedString = Convert.ToBase64String(encodedData);
        var decodedData = rsa.Decrypt(Convert.FromBase64String(encodedString), false);
        var decodedStr = Encoding.UTF8.GetString(decodedData);

        Assert.AreEqual(str, decodedStr);
    }

诀窍是将字节数组转换为可以表示为字符串的形式。为此,上面的示例使用了Base64 编码和解码。

【讨论】:

  • 谢谢你,真的很感激
  • :) 没问题,乐于助人!
  • 再问一个问题,如果我要在文本框中显示此内容,我必须显示“encodedString”,对吗?
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多