【问题标题】:Exporting encrypted XML file and decrypt in another application?导出加密的 XML 文件并在另一个应用程序中解密?
【发布时间】:2020-12-14 23:19:59
【问题描述】:

我正在用 c# 制作一个应用程序来加密导出的 XML 文件,这样人们在导出时就无法读取这些文件。用户下载一个加密的 XML 文件并将其导入本地应用程序,该应用程序必须对其进行解密。

现在我可以加密文件,但我如何安全地与其他应用程序共享密钥以安全地解密那里的 xml 文件?

        static CspParameters cspParams = new CspParameters();
        static RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);

        static void Main(string[] args)
        {
            cspParams.KeyContainerName = "XML_ENC_RSA_KEY";

            Console.WriteLine("What do you want to do?");
            Console.WriteLine("");
            Console.WriteLine("- Export");
            Console.WriteLine("- Exit");
            Console.Write("Enter: ");
            if (Console.ReadLine() == "export")
            {
                Export();
                Console.WriteLine("file Exported");
            }

【问题讨论】:

  • 如果你想在同一台机器上加解密,任何足够专业的用户都可以获得密钥或明文。
  • @CodeCaster 最终不在同一台机器上,最终用户从应用程序在线下载 XML 并将其上传到另一个应用程序,因此它必须在不同的机器上发生
  • 本质上你的问题如下:我怎样才能安全地转移我的密钥/密码?

标签: c# xml encryption


【解决方案1】:

您可以将您的私钥导出到 .pem 文件,然后其他应用程序可以使用它。

或者,如果您正在谈论的另一个应用程序是您自己在另一台计算机上的应用程序,您可以扩展您的应用程序,以便它允许从 xml 导入,并且您只将这个 xml 分发到您想要的地方

包含的小代码示例:

    byte[] toEncryptData = Encoding.ASCII.GetBytes("<mytest></mytest>");

    //Generate keys
    RSACryptoServiceProvider rsaGenKeys = new RSACryptoServiceProvider();
    string privateXml = rsaGenKeys.ToXmlString(true);
    string publicXml = rsaGenKeys.ToXmlString(false);

    //Encode with public key
    RSACryptoServiceProvider rsaPublic = new RSACryptoServiceProvider();
    rsaPublic.FromXmlString(publicXml);
    byte[] encryptedRSA = rsaPublic.Encrypt(toEncryptData, false);
    string EncryptedResult = Encoding.Default.GetString(encryptedRSA);

    File.WriteAllText("key", privateXml);
    var key = File.ReadAllText("key");

    //Decode with private key
    var rsaPrivate = new RSACryptoServiceProvider();
    rsaPrivate.FromXmlString(key);
    byte[] decryptedRSA = rsaPrivate.Decrypt(encryptedRSA, false);
    string originalResult = Encoding.Default.GetString(decryptedRSA);
    Console.WriteLine(originalResult);

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 2019-11-09
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多