【问题标题】:C# Decrypt symmetric key with private asymmetric keyC# 使用非对称私钥解密对称密钥
【发布时间】:2013-10-24 11:07:31
【问题描述】:

我们收到一个加密的 XML 文档,其中一些内容使用对称密钥加密,对称密钥在 XML 中提供,使用我们证书的公钥加密。 我试图用我们的私钥解密后一部分,但它一直抛出错误

这是我的代码,非常感谢帮助

public static void Decrypt(XmlDocument Doc, RSA privateKey, string KeyName)
{
      XmlElement xmlelement = Doc.GetElementsByTagName("bla")[0] as XmlElement;
      EncryptedKey encryptedKey = new EncryptedKey();
      encryptedKey.LoadXml(xmlelement);

       //How is the privateKey mapped to encryptedKey??
       //DecryptEncryptedKey throws a value null exception

       EncryptedXml exml = new EncryptedXml(Doc); 
       byte[] decrOut = exml.DecryptEncryptedKey(encryptedKey);            
}

【问题讨论】:

  • 你有加密它的代码吗?
  • 不是,XML是第三方生成的
  • 您知道对称部分和密钥使用了哪种加密算法吗?
  • 对称密钥由供应商选择。在 xml 元素上使用 aes256-cbc-pkc5 的密钥。然后使用我们证书的公共部分(2048)对对称密钥进行加密

标签: c# xml encryption


【解决方案1】:

您必须预先加载 XmlDocument 和证书,即

XmlDocument 文档对象与您的 xml X509Certificate2 x509ServiceProvider(你的证书和私钥)

        // Go and get the encrypted key node
        XmlElement encryptedCipherValueElement = (XmlElement)doc.SelectSingleNode("/XPATH to CipherValue i.e. encrypted symmetric key");

        // These are the input bytes to be decrypted
        byte[] encryptedCipherBytes = Convert.FromBase64String(encryptedCipherValueElement.InnerText);

        // The RSA service provider is necessary as we can't just rely on IIS to decrypt stuff
        RSACryptoServiceProvider rsaServiceProvider = x509ServiceProvider.PrivateKey as RSACryptoServiceProvider;

        // We want to use PKCS1 v1.5 padding which corresponds to OEAP padding being false 
        // This is what other vendors appear to be using. This may become a parameter
        // in time
        const bool OeapPadding = false;
        byte[] decryptedCipherBytes = rsaServiceProvider.Decrypt(encryptedCipherBytes, OeapPadding);

        // We want to wipe out any lingering references to keys or algorithms as
        // soon as possible
        rsaServiceProvider.Clear();

        return decryptedCipherBytes;

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 2011-01-14
    • 1970-01-01
    • 2017-01-12
    • 2015-12-30
    • 1970-01-01
    • 2019-12-29
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多