C# 如何从用于BouncyCastle说明的字符串创建密钥对?

C# 如何从用于BouncyCastle说明的字符串创建密钥对?,c#,encryption,rsa,bouncycastle,C#,Encryption,Rsa,Bouncycastle,我正在为使用BouncyCastle创建的服务开发一种描述方法。该方法应如下所示: public string RSADecryptString(string inputString, string privateKey) { //decription process here } 该方法接收2个参数: inputString=我要解密的加密数据字符串 privateKey=解密我的inputString的私钥字符串(该密钥由BouncyCastle生成

我正在为使用BouncyCastle创建的服务开发一种描述方法。该方法应如下所示:

    public string RSADecryptString(string inputString, string privateKey)
    {
        //decription process here
    }
该方法接收2个参数:

  • inputString=我要解密的加密数据字符串
  • privateKey=解密我的inputString的私钥字符串(该密钥由BouncyCastle生成)
  • 生成的私钥如下所示:

        public string RSADecryptString(string inputString, string privateKey)
        {
            //decription process here
        }
    
    -----开始RSA私有关键关键关键是一个关键的关键是一个关键的关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键的关键是一个关键的关键是一个关键的关键的关键是一个关键的关键是一个关键的关键的关键是一个关键的关键的关键是一个关键的关键是一个关键的关键的关键的关键的关键是一个关键的关键是一个关键的关键是一个关键的关键是一个关键的关键的关键的关键的关键是一个关键的关键的关键的关键的关键的关键的关键的关键的关键的关键的关键是一个关键的关键的关键的关键是关键是关键是一个关键的关键的关键的关键的关键的关键的关键是一是一是一Fu5LWF2.在一个研究中,我们发现了一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于的的的的的的的的的的的的的的OQPJU72FMFCLZEBAYT+jTCT一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究,一种新的研究方法,一种新的研究,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究,一种新的研究方法,一种新的研究,新的研究,新的研究,新的一代的研究,一种新的研究,新的一种新的研究,新的研究,新的研究,新的工作,新的一个新的工作,新的一个工作,新的一个工作,新的,新的一个8个,新的,新的一个工作,新的,新的,新的,新的,新的一个,新的一个,或者新的,或者新的一个,或者新的一个研究的ndtf/piA6z1ZEI9xwrzmcWbE5I4.在这些问题上,他们是一个非常有用的研究。他们是一个非政府的非政府组织,或者是一个非政府的非政府组织,或者是一个非政府的非政府组织,或者是一个非政府的非政府部门,或者是一个非政府的非政府组织,或者是一个非政府的非政府部门,或者是一个非政府的非政府部门,或者是一个非政府的非政府的非政府部门,或者是非政府的非政府的非政府的非政府部门,或者非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非HRD/DzjwwJqHQ5DOnaRnmJAywcgr36xo1j+YSQKBGQDEWZRUJYXU6MSOIVD0NKEZ2+A1ZIDSBPHTIL2COFEYFC+OFHXU4BMWBINZN4NN7MM3ZSB6WOLLBRRGJ2HOSHHOMQGB4QZEKJ6或V3TG9ABZGBWDIPZ12BOEPAQQFBBV1AIJOCFL890NMBLPAD9YRWBTSK4HOJYTRQGG=----结束RSA私钥-----

    我在这个网站上看到了一个工作示例:

    他们的c#示例具有我需要实现的加密和解密逻辑,但问题是它们使用相同的方法生成密钥。我还看到了许多StackOverflow问题,其中有一些关于如何从PEM文件中读取私钥的示例,但在我的例子中,我没有任何PEM文件,我只是将私钥放在字符串上

    我曾想过生成一个包含字符串私钥的PEM文件,但这似乎根本没有效率

    我曾尝试使用TextReader将我的字符串转换为PemReader对象可以读取的内容,但它总是返回null,而我读取的内容是由于解析错误。我还尝试删除“---BEGIN RSA PRIVATE KEY----”部分来尝试解决解析错误,但没有成功。这是我尝试过的一个例子

        public string RSADecryptString(string inputString, string pK)
        {
            TextReader textReader = new StringReader(pK);
            PemReader pemReader = new PemReader(textReader);
            object privateKeyObject = pemReader.ReadObject();
            AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)privateKeyObject;
    
            //AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
            Console.WriteLine(keyPair.ToString());
            RsaKeyParameters privateKey = (RsaKeyParameters)keyPair.Private;
    
            IAsymmetricBlockCipher cipher = new RsaEngine();
            Console.WriteLine("privateKey: " + privateKey.ToString());
    
            cipher.Init(false, keyPair.Private);
            byte[] bytesl = Convert.FromBase64String(inputString);
            byte[] deciphered = cipher.ProcessBlock(bytesl, 0, bytesl.Length);
            string decipheredText = _encoding.GetString(deciphered);
    
            return decipheredText;
        }
    
    我一直在想,是否有一种方法可以只使用我的私钥字符串创建解密方法所需的KeyPair对象,比如SetPrivateKey方法。我是BouncyCastle的新手,不知道我是否走对了路


    有关于如何继续的建议吗?

    如果在页眉之后和页脚之前有一个换行符,则可以成功加载该键,如在线所示。@Topaco成功了。谢谢。如果问题不太多,我能再问你一个问题吗?我解密后的文本返回了很多wierd字符,你知道是什么原因吗?下面是一个输入字符串和私钥的示例,我正在使用@Topaco,如果它有帮助的话,我被告知输入字符串的加密方式是这样的:
    rsacryptserviceprovider rsa=DecodeX509PublicKey(DecodeOpenSSLPublicKey(xmlString));返回Convert.ToBase64String(rsa.Encrypt(Encoding.ASCII.GetBytes(inputString),false))加密期间使用PKCS#1 v1.5填充。这也必须应用于解密,请参见此处:。@Topaco工作得非常好。非常感谢你的支持。你介意我问你是怎么注意到PKCS加密被使用的吗?我想知道你是如何认识到这一点的,这样我以后才能做到。再次感谢你的帮助。