Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#RSA在BouncyCastle的帮助下使用给定的公钥加密文本_C#_.net_Encryption_Cryptography_Rsa - Fatal编程技术网

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

C#RSA在BouncyCastle的帮助下使用给定的公钥加密文本,c#,.net,encryption,cryptography,rsa,C#,.net,Encryption,Cryptography,Rsa,这是我关于Stackoverflow的第一篇文章,所以我将非常感谢您对如何改进的建议 我试了以下几点: 因此,我试图在BouncyCastle的帮助下,与Microsoft RSACryptoServiceProvider一起对字符串消息进行编码,让它成为“测试” 我得到了一个给定的公钥,其中服务器提供者已经向我描述了公钥的结构 公钥:480152500100000100970348B03E911在CB5FCF7FEBE42E528A050F05D2635DD958F9836CFB4B5B5C8

这是我关于Stackoverflow的第一篇文章,所以我将非常感谢您对如何改进的建议

我试了以下几点: 因此,我试图在BouncyCastle的帮助下,与Microsoft RSACryptoServiceProvider一起对字符串消息进行编码,让它成为“测试”

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

公钥:480152500100000100970348B03E911在CB5FCF7FEBE42E528A050F05D2635DD958F9836CFB4B5B5C834F604F9DFB391459459772FB5100AFD0FE3A9B2DA724E62113A9E9E9E9E9E9E9E9E9E9E9C957CB5FCF7FE42E528A050F05D2635DD958F9836CFB4B6B6B616777CFB9D9D9AD679E321972E4F4F4F3057CB6904017CFB4E9E9E4F417CFB4F4E9E9E4E9E9E4E9E4E9E9E4E4E4E9E9E4E9E9E4E9E9E9E9E4E9E9E9E4E9E9E50FA176B5A77FAB84E25CFCDBF2330AA173DA1156C8B79D6BFAE828B081183E63F137648E1FC1786B52D815C248CADDF6A17C941414F67A23DFE821966B64B96E36F8604FA00E8E357F5AE6C83B992D622D5E9C1D0000000301001

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

string strModulusAndExponentAsXml = "<RSAKeyValue><Modulus>00970348B03E911DCCE5ED8F555C2116DBC4D7E96D4C1CDC4BBBAAD26BAA54B5C834F604F9DFB391459459772FB51D00AFD0FE3A9B2DA724E62113A9E8C95BEF377CB5FCF7FEBE42E5282A0DA50F01D5D2635DD958F9836CFB4F8B616777C0CF67DB9A5530AD679E321972E4D4F4F33DED057CB690417A3B42FBFCE2AD9FDD80C815AF1EC858C796D4EA2F17954E4BFAD08E3E0397FA34122AC5951D889B06359A401E5506E50FA176B5A77FAB84E25CFCDBF2330AA173DA1156C8B79D6DB6BFAE828B00811183E63F137648E1FC1786B52D815C248BCADDDF6A17C941414F67A23ADFE82FE76196B64B96E36F8604FA00E8E357F5AE6C83B992D622D5E9CD9C1D</Modulus><Exponent>010001</Exponent></RSAKeyValue>";
  string strModulusAndExponentAsBase64 = Base64Encode(strModulusAndExponentAsXml);
在这里它失败了,我得到了错误:

System.IO.IOException:“遇到未知标记28”

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

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

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

这是您应该尝试的方法。

对我来说,一个危险信号是您没有使用来自同一名称空间的转换函数
Convert.FromBase64String
是一个.NET函数,但是
Base64Encode
来自哪个名称空间?它非常简单。您的数据与任何ASN1对象绝对没有关系。它是XML,对它进行base64编码毫无意义。相反,用好的谢谢你们,我有主意了。我用这种方法处理了许多不同的类型,甚至创建了一个用于编码的新类。James说得对,我只需要RSA.FromXmlString()。在我的第一篇文章中,我在下面的转换修复中犯了错误:毕竟我需要将十六进制字符串解码为字节数组,然后将其转换为Base64类型,然后将转换后的模数和指数与xml公钥一起放入变量中,现在就可以工作了。对于具有相同问题的任何人,您可以在此处找到转换十六进制字符串的方法:
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);