Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 使用BouncyCastle在私有PEM文件不起作用的情况下进行RSA解密_C#_.net_Cryptography_Rsa - Fatal编程技术网

C# 使用BouncyCastle在私有PEM文件不起作用的情况下进行RSA解密

C# 使用BouncyCastle在私有PEM文件不起作用的情况下进行RSA解密,c#,.net,cryptography,rsa,C#,.net,Cryptography,Rsa,我正在用C语言的BouncyCastle做一些测试,我想对一些数据进行加密,然后用我计算机中存储为PEM文件的一对密钥解密 public static string RSABouncyEncrypt(string content) { var bytesToEncrypt = Encoding.UTF8.GetBytes(content); AsymmetricKeyParameter keyPair; using (var reade

我正在用C语言的BouncyCastle做一些测试,我想对一些数据进行加密,然后用我计算机中存储为PEM文件的一对密钥解密

  public static string RSABouncyEncrypt(string content)
    {
        var bytesToEncrypt = Encoding.UTF8.GetBytes(content);
        AsymmetricKeyParameter keyPair;
        using (var reader = File.OpenText(@"C:\Users\Diego\Documents\public.pem"))) 
            keyPair = (AsymmetricKeyParameter)new org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject();



        var engine = new RsaEngine();
        engine.Init(true, keyPair);

        var encrypted = engine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length);

        var cryptMessage = Convert.ToBase64String(encrypted);
        Logs.Log.LogMessage("encrypted: " + cryptMessage);
        System.Windows.MessageBox.Show(cryptMessage);

        //Decrypt before return statement to check that it has been encrypted correctly
        RSADecrypt(cryptMessage);
        return cryptMessage;
    }

public static void RSADecrypt(string string64)
    {
        var bytesToDecrypt = Convert.FromBase64String(string64); // string to decrypt, base64 encoded

        AsymmetricCipherKeyPair keyPair;

        using (var reader = File.OpenText(@"C:\Users\Diego\Documents\private.pem"))
            keyPair = (AsymmetricCipherKeyPair)new Org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject();

        var decryptEngine = new RsaEngine();
        decryptEngine.Init(false, keyPair.Private);

        var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));
        Logs.Log.LogMessage("decrypted: " + decrypted);
        System.Windows.MessageBox.Show(decrypted);
    }
RSADecrypt函数显示错误。当我解密后显示消息框时,我得到以下信息:

���Z��8o>>���;;�/�Z�ב?����F��͌5���o1I�,���4.� s�W����W��x�4p�$-|А���&��Rv}�G��v�c��&吴? �D�� }E���O����7.�N��!E��E��$Y�g9ςOأ��P�� �T�D�T�nN��K$�bQ��!�v���-�血红蛋白���1.���?����@B�Y� R��乐� h=*年�W �L�W|�嘟��|G��电动汽车��@�[��M


这肯定不是我加密的。我做错了什么?

我重现了这个问题,它发生的原因是您使用的私钥和公钥不匹配。换句话说,消息是用私钥加密的,我们称之为私钥,它来自一对私钥1/公钥1,但您试图解密它对于公钥,我们将其称为publick_key_2,它来自不同的密钥对private_key_2/public_key_2。尝试生成一个新密钥对,并在示例中使用它,例如:

var kpgen = new RsaKeyPairGenerator();
kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));

var keyPair = kpgen.GenerateKeyPair();

using (var writer = new StreamWriter(File.OpenWrite(@"C:\Users\Diego\Documents\private2.pem")))
{
    new PemWriter(writer).WriteObject(keyPair.Private);
}

using (var writer = new StreamWriter(File.OpenWrite(@"C:\Users\Diego\Documents\public2.pem")))
{
    new PemWriter(writer).WriteObject(keyPair.Public);
}

我重现了这个问题,因为你使用了一个私钥和一个不匹配的公钥。换句话说,消息是用一个私钥加密的,我们称它为私钥,它来自一对私钥/公钥,但你试图用一个公钥解密,我们称它为公钥,它来自不同的t对私钥\ U 2/公钥\ U 2。尝试生成一个新密钥对,并在您的示例中使用它,例如:

var kpgen = new RsaKeyPairGenerator();
kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));

var keyPair = kpgen.GenerateKeyPair();

using (var writer = new StreamWriter(File.OpenWrite(@"C:\Users\Diego\Documents\private2.pem")))
{
    new PemWriter(writer).WriteObject(keyPair.Private);
}

using (var writer = new StreamWriter(File.OpenWrite(@"C:\Users\Diego\Documents\public2.pem")))
{
    new PemWriter(writer).WriteObject(keyPair.Public);
}

实际上,它不起作用的原因是没有关于填充的信息

var decryptEngine=新的PKCS1EncodingrsEngine


实际上,它不起作用的原因是没有关于填充的信息

var decryptEngine=新的PKCS1EncodingrsEngine


显示了什么错误?显示了什么错误?