【问题标题】:C# RSA Encrypting text using a given public Key with help of BouncyCastleC# RSA 在 BouncyCastle 的帮助下使用给定的公钥加密文本
【发布时间】:2019-06-15 01:02:44
【问题描述】:

这是我在 Stackoverflow 上的第一篇文章,因此我将不胜感激有关如何改进的任何建议。

我从here 尝试了以下操作 所以我试图在 BouncyCastle 的帮助下使用 Microsoft RSACryptoServiceProvider 对字符串消息进行编码,让它成为“测试”。

我有一个给定的公钥,服务器提供商已经向我描述了公钥的结构。

公钥:48015250010000010100970348B03E911DCCE5ED8F555C2116DBC4D7E96D4C1CDC4BBBAAD26BAA54B5C834F604F9DFB391459459772FB51D00AFD0FE3A9B2DA724E62113A9E8C95BEF377CB5FCF7FEBE42E5282A0DA50F01D5D2635DD958F9836CFB4F8B616777C0CF67DB9A5530AD679E321972E4D4F4F33DED057CB690417A3B42FBFCE2AD9FDD80C815AF1EC858C796D4EA2F17954E4BFAD08E3E0397FA34122AC5951D889B06359A401E5506E50FA176B5A77FAB84E25CFCDBF2330AA173DA1156C8B79D6DB6BFAE828B00811183E63F137648E1FC1786B52D815C248BCADDDF6A17C941414F67A23ADFE82FE76196B64B96E36F8604FA00E8E357F5AE6C83B992D622D5E9CD9C1D00000003010001 P>

公钥是一个十六进制字符串,我在单独的变量中提取模数和指数并将它们保存为 Base64 字符串。 模数和指数作为 xml 字符串保存在另一个变量中,用作 RSAKeyValue。

string strModulusAndExponentAsXml = "<RSAKeyValue><Modulus>00970348B03E911DCCE5ED8F555C2116DBC4D7E96D4C1CDC4BBBAAD26BAA54B5C834F604F9DFB391459459772FB51D00AFD0FE3A9B2DA724E62113A9E8C95BEF377CB5FCF7FEBE42E5282A0DA50F01D5D2635DD958F9836CFB4F8B616777C0CF67DB9A5530AD679E321972E4D4F4F33DED057CB690417A3B42FBFCE2AD9FDD80C815AF1EC858C796D4EA2F17954E4BFAD08E3E0397FA34122AC5951D889B06359A401E5506E50FA176B5A77FAB84E25CFCDBF2330AA173DA1156C8B79D6DB6BFAE828B00811183E63F137648E1FC1786B52D815C248BCADDDF6A17C941414F67A23ADFE82FE76196B64B96E36F8604FA00E8E357F5AE6C83B992D622D5E9CD9C1D</Modulus><Exponent>010001</Exponent></RSAKeyValue>";
  string strModulusAndExponentAsBase64 = Base64Encode(strModulusAndExponentAsXml);

现在我想创建一个 Asn1Object 并提供字节参数

Asn1Object obj = Asn1Object.FromByteArray(Convert.FromBase64String(strModulusAndExponentAsBase64));

这里失败了,我得到错误:

System.IO.IOException: '遇到未知标签 28'

有谁知道我做错了什么,所以我可以用给定的指数和模数创建 Asn1Ojbect 吗? 如果有任何不清楚的地方,请告诉我。

【问题讨论】:

  • 对我来说一个危险信号是您没有使用来自同一命名空间的转换函数。 Convert.FromBase64String 是一个 .NET 函数,但 Base64Encode 来自哪个命名空间?
  • 真的很简单。您的数据与任何 ASN1 对象绝对无关。它是 XML,base64 编码根本没有意义。相反,使用RSA.FromXMLString()
  • 好的,谢谢你们,我明白了。我使用了许多不同类型的方法,甚至创建了一个用于编码目的的新类。詹姆斯是对的,我只需要 RSA.FromXmlString()。在我的第一篇文章中,我在下面的转换修复中犯了错误:毕竟我需要将我的十六进制字符串解码为字节数组,然后将其转换为 Base64 类型,然后我将转换后的模数和指数与 xml 一起放入我的变量中公钥,它现在可以工作了。对于任何有同样问题的人,您可以在这里找到转换十六进制字符串的方法:stackoverflow.com/a/46327314/10945532

标签: c# .net encryption cryptography rsa


【解决方案1】:

如果您想检查您的加密货币,请不要将其公开。 你应该尝试不同的方法:

if (algValue != null)
    {
        algValue.Clear();
    }
    else
    {
        throw new Exception("No TripleDES key was found to clear.");
    }
}

public void Encrypt(string Element)
{
    // Find the element by name and create a new
    // XmlElement object.
    XmlElement inputElement = docValue.GetElementsByTagName(Element)[0] as XmlElement;

    // If the element was not found, throw an exception.
    if (inputElement == null)
    {
        throw new Exception("The element was not found.");
    }

    // Create a new EncryptedXml object.
    EncryptedXml exml = new EncryptedXml(docValue);

    // Encrypt the element using the symmetric key.
    byte[] rgbOutput = exml.EncryptData(inputElement, algValue, false);

这是你应该尝试的方法。

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 2016-09-21
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2017-03-17
    • 2015-05-27
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多