使用Bouncy Castle的C#RSA解密

mp3*_*uck 9 c# java cryptography rsa bouncycastle

我得到了一个Base64编码加密字符串,它使用Bouncy Castle在Java中加密.下面的示例Java代码段:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
byte[] encryptedText = cipher.doFinal("xxxxx|xxxxx".getBytes("UTF-8"));
String encodedText = new BASE64Encoder().encode(encryptedText);
Run Code Online (Sandbox Code Playgroud)

我需要使用Bouncy Castle解密生成的字符串,但是在C#中,我已经获得了关于如何在Java中执行此操作的代码片段,但我无法将其转换为C#(原因是我们正在构建.net站点,以及将成为Java站点中的iFrame.Java站点将把RSA加密字符串传递给.NET站点.下面解密的示例Java代码:

Cipher cipherDec = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipherDec.init(Cipher.DECRYPT_MODE, key.getPrivate());
byte[] decodedText = new BASE64Decoder().decodeBuffer(encodedText);
byte[] decryptedText = cipherDec.doFinal(decodedText);
String finalValue = new String(decryptedText, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

我从http://www.bouncycastle.org/csharp/下载了示例,但似乎没有输入字符串值来加密的示例,然后它通过加密/解密过程.

我已经给出了模数,公共指数,私有指数,素数P,素数q,素数指数p,素数指数qcrt系数的值.

我看到我可以使用以下内容:

IAsymmetricBlockCipher signer = new Pkcs1Encoding(new RsaEngine());
signer.Init(true, pubParameters);
Run Code Online (Sandbox Code Playgroud)

但是该signer对象似乎与上面的Java示例没有相同的方法.

我只能使用的方法是

ProcessBlock(byte[] inbuf, int inOff, int inLen);
Run Code Online (Sandbox Code Playgroud)

但我无法看到如何在我的上下文中使用它.

这里的任何帮助将非常感激.

mp3*_*uck 13

为了帮助他人,转换的最终代码如下:

RsaKeyParameters privParameters = new RsaPrivateCrtKeyParameters(mod, pubExp, privExp, p, q, pExp, qExp, crtCoef);
RsaKeyParameters pubParameters = new RsaKeyParameters(false, mod, pubExp);
IAsymmetricBlockCipher eng = new Pkcs1Encoding(new RsaEngine());
eng.Init(false, privParameters);
byte[] encdata = System.Convert.FromBase64String("{the enc string}");
encdata = eng.ProcessBlock(encdata, 0, encdata.Length);
string result = Encoding.UTF8.GetString(encdata);
Run Code Online (Sandbox Code Playgroud)

mod,pubExp等都是BigInteger值:

static BigInteger mod = new BigInteger("big int value");
Run Code Online (Sandbox Code Playgroud)

以下using指令是必需的:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Math;
Run Code Online (Sandbox Code Playgroud)

哪个可以从bouncycastle网站获得.http://www.bouncycastle.org/csharp/