当前位置: 首页 > 知识库问答 >
问题:

C#RSA在BouncyCastle的帮助下使用给定的公钥加密文本

彭阳荣
2023-03-14

这是我在Stackoverflow上的第一个帖子,所以我将感谢任何关于如何改进的建议。

我在这里尝试了以下内容,因此我试图在BouncyCastle的帮助下,通过Microsoft RSACryptoServiceProvider对字符串消息进行编码,让它成为“测试”。

我得到了一个给定的公钥,其中服务器提供者已经向我描述了公钥的结构。

公钥:48015250010000010100970348B03E911DCCE5ED8F555C2116DBC4D7E96D4C1CDC4BBBAAD26BAA54B5C834F604F9DFB391459459772FB51D00AFD0FE3A9B2DA724E62113A9E8C95BEF377CB5FCF7FEBE42E5282A0DA50F01D5D2635DD958F9836CFB4F8B616777C0CF67DB9A5530AD679E321972E4D4F4F33DED057CB690417A3B42FBFCE2AD9FDD80C815AF1EC858C796D4EA2F17954E4BFAD08E0397FA34122AC5951D889B06359A401E5506E50FA176B5A77FAB84E25CFCDB

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

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

现在我想创建一个asn1对象并提供byte参数

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

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

系统木卫一。IOException:“遇到未知标记28”

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

共有1个答案

湛宏旷
2023-03-14

如果你想检查密码,不要把它公开。您应该尝试另一种方法:

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);

这是你应该尝试的方法。

 类似资料:
  • 我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:

  • 刚开始使用PGP,我正在尝试通过C#控制台应用程序加密一个文件。在我的研究中,似乎BouncyCastle是一个更受欢迎的应用。我找到了下面的文章,它看起来很好,除了我只有公钥。http://burnignorance.com/c-coding-tips/pgp-encryption-decryption-in-c/

  • 问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(

  • 我使用Delphi XE和Lockbox3.5,我想加密一个字符串,该字符串具有支付网关提供的公钥,需要操作,公钥类似于:------开始公钥------这里的职员------结束公钥------我无法使RSA编解码器读取该公钥,我的代码如下: 编解码器cdcRA链接到CryptoLibrary,密码为(RSA公钥加密系统*),链接模式为空,但此代码失败,并出现内存不足错误。谢谢你的提示。。 演示

  • 我找到了几个可以使用的解决方案。Net RSA Provider使用公钥对消息进行加密,并使用私钥对其解密。 但我想要的是用私钥加密,用公钥解密。 我希望在我的应用程序中存储公钥,并使用私钥加密许可证,例如在我的开发人员计算机上,将其发送到应用程序,并让信息使用公钥解密。 我怎样才能做到这一点?