将 RSA 加密 XML 文件转换为字节 [] 时出错

本文关键字:字节 出错 转换 RSA 加密 XML 文件 | 更新日期: 2023-09-27 17:56:41

这是这篇SO帖子的后续文章,我在其中学习了生成RSA密钥对并将公钥存储在设置中。我通过以下方式生成了密钥:

 CspParameters cspParams = new CspParameters();
                cspParams.KeyContainerName = "XML_ENC_RSA_KEY";
                RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);
                string keyXml = rsaKey.ToXmlString(true);

我将该字符串的公钥部分复制到我的程序设置中,它看起来像:

"<RSAKeyValue><Modulus>mfXS3Na0XfkjhpjS3sL5XcC9o+j6KXi1LB9yBc4SsTMo1Yk/pFsXr74gNj4aRxKB45+hZH/lSo933NCDEh25du1iMsaH4TGQNkCqi+HDLQjOrdXMMNmaQrLXGlY7UCCfFUnkEUxX51AlyVLzqLycaAt6zm5ljnDXojMC7JoCrTM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"

这看起来有效吗?

然后我拿着我的XML文档并尝试将其转换为加密函数的byte[]:

string fileName = System.IO.Path.Combine(Application.StartupPath, "alphaService.xml");
                XDocument doc = new XDocument();
                XElement xml = new XElement("Info",
                    new XElement("DatabaseServerName", txtServerName.Text),
                    new XElement("DatabaseUserName", txtDatabaseUserName.Text),
                    new XElement("DatabasePassword", txtDatabasePassword.Text),
                    new XElement("ServiceAccount", txtAccount.Text),
                    new XElement("ServicePassword", txtServicePassword.Text),
                    new XElement("RegistrationCode", txtRegistrationCode.Text));
                doc.Add(xml);
                doc.Save(fileName);
                // Convert XML doc to byte stream
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(fileName);
                byte[] fileBytes = Encoding.Default.GetBytes(xmlDoc.OuterXml);
                Encrypt(fileBytes);

我从加密函数中得到一个"语法错误行 1",即:

 private static byte[] Encrypt(byte[] bytes)
        {
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            {
                rsa.FromXmlString(Properties.Settings.Default.PublicKeyXml);
                return rsa.Encrypt(bytes, true);
            }
        }

有什么想法吗?编辑:实际错误是:

 rsa.FromXmlString(Properties.Settings.Default.PublicKeyXml);

将 RSA 加密 XML 文件转换为字节 [] 时出错

我只是在这里看你的帖子,寻找有关RSACryptoServiceProvider的信息。 我尝试了你的代码,它对我有用,嗯,有点,直到我再次开始阅读你的消息,我从来没有收到你犯的错误。

从属性设置中的公钥中删除引号。 当我看到您为公钥发布的内容时,我进入并将引号添加到我的字符串中,我得到了与您完全相同的错误。

我确实遇到了错误,但与您的不同是在加密上遇到错误的长度错误。 但是,我发现,如果我将 XmL 转换为字节的行更改为 .ToString() 而不是 .外部XML它工作。

    private void button4_Click(object sender, EventArgs e)
    {
        string fileName = System.IO.Path.Combine(Application.StartupPath, "alphaService.xml");
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(fileName);
        byte[] fileBytes = Encoding.ASCII.GetBytes(xmlDoc.ToString());
        byte[] EncryptedBytes = Encrypt(fileBytes);
        string EncryptedString = Encoding.ASCII.GetString(EncryptedBytes);
    }
    private static byte[] Encrypt(byte[] bytes)
    {
        using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
        {
            rsa.FromXmlString(Properties.Settings.Default.PublicKeyXml);
            return rsa.Encrypt(bytes, false);
        }
    }

我更改并编码为 ASCII,以便我可以将字节数组转换为字符串,如果您使用相同的方法转换为字节数组,则最好这样做。