如何使用C#BouncyCastle从JSEncrypt解密RSA加密字符串

时间:2016-09-07 14:13:39

标签: javascript c# encryption rsa bouncycastle

我知道有一些关于此的帖子,但没有一个解决我的问题所以我会切入追逐。

我使用JSEncrypt(javascript)使用以下代码加密了一个字符串:

var rsa = new JSEncrypt();
rsa.setPublicKey(pubKey);
var encrypted = rsa.encrypt($(this).text());

公钥存储在var中,如下所示:

var pubKey = "-----BEGIN PUBLIC KEY-----\
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkskeHcz6zTvnXKGHbCkfeEnKF\
    38j1hEgWw9UAZlg5a7m/1AaHkqkvKUOfoX+zSYH4CJr/MEVmrEa2ucPjKljXK14M\
    74NzSwYuPxaikpfwxe7qvn1/0TIqahVHEiSmqieLIl+gHIyAc32e/wUyjhGFjbwL\
    eJ/hBDTkt6O/QajWKwIDAQAB\
    -----END PUBLIC KEY-----";

然后我使用生成的密文并将其发送到需要解密的c#。我正在使用Bouncy Castle并且已经编写了代码:

public string Decrypt(string cipherText)
{
    var bytesToDecrypt = Convert.FromBase64String(cipherText);
    AsymmetricCipherKeyPair keyPair;

    using (var reader = File.OpenText(AppDomain.CurrentDomain.BaseDirectory + @"/scripts/private.pem"))
    {
        keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();
    }
    var engine = new RsaEngine();
    engine.Init(false, keyPair.Private);

    var decrypted = engine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length);
    var decryptedMessage = Encoding.UTF8.GetString(decrypted);
    return decryptedMessage;
}

它没有错误地进行解密,但输出如下所示:

"\u0002��lT�J;�ol�\u008fY�L:GK=\u0002�(�����\\\u0003ܢ�fMT�\u001eoqR�\\\u000f�s�A��+ښ�|����\u0001J�s�w[\u001egſ\u0012^7�\u000f44Qy\a*�T�~Tu�Ei�O/<�\u000f!S:�]\u0018V<7S\n:x@���GȀ\u0016.w���Lb�\0"

我试图通过以下方式专门使用PKSC#1:

public string Decrypt(string cipherText)
{
    var bytesToDecrypt = Convert.FromBase64String(cipherText);
    AsymmetricCipherKeyPair keyPair;

    using (var reader = File.OpenText(AppDomain.CurrentDomain.BaseDirectory + @"/scripts/private.pem"))
    {
        keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();
    }
    Pkcs1Encoding engine = new Pkcs1Encoding(new RsaEngine());
    engine.Init(false, keyPair.Private);

    var decrypted = engine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length);
    var decryptedMessage = Encoding.UTF8.GetString(decrypted);
    return decryptedMessage;
 }

我在这里显然有一些错误,因为decryptedMessage =“”和解密的字节=字节[0]

如何解决此问题,以便正确解密cipherText。

据我所知,JSEncrypt使用PKSC1编码加密为默认值?

感谢任何帮助。

请避免粗鲁的评论,因为正确学习是我在这里发帖的原因。

提前感谢您的帮助!

0 个答案:

没有答案