使用 Bouncy Castle 进行 C# RSA 解密

C# RSA Decryption using Bouncy Castle(使用 Bouncy Castle 进行 C# RSA 解密)
本文介绍了使用 Bouncy Castle 进行 C# RSA 解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I have been given a Base64 Encoded encrypted string, which was encrypted in Java using Bouncy Castle. Example Java snippet below:

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

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

I need to decrypt the resulting string using Bouncy Castle, but in C# I have been given a code snippet on how to do this in Java, but I can't convert this for C# (reasons is we are building a .net site, and is going to be an iFrame within a Java site. The Java site is going to passing in the RSA Encrypted string to the .NET site). Example Java code to decrypt below:

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

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

I have downloaded the examples from http://www.bouncycastle.org/csharp/ but there doesn't seem to be an example of inputting a string value to get encrypted, and it then going though the encrypt/decrypt process.

我得到了 模数公共指数私人指数素数P的值>prime qprime exponent pprime exponent qcrt coefficient.

I have been given values for modulus, public exponent, private expontent, prime P, prime q, prime exponent p, prime exponent q and crt coefficient.

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

I have seen that I can use the following:

IAsymmetricBlockCipher signer = new Pkcs1Encoding(new RsaEngine());
signer.Init(true, pubParameters);

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

But the signer object doesn't seem to have the same methods as the Java examples above.

我唯一能用的方法是

ProcessBlock(byte[] inbuf, int inOff, int inLen);

但我看不出如何在我的上下文中使用它.

But I can't see how to use this in my context.

这里的任何帮助将不胜感激.

Any help here would be most appreciated.

推荐答案

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

To Help others, the final code to convert is as follows:

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

mod、pubExp 等都是 BigInteger 值:

mod, pubExp etc etc are all BigInteger values:

static BigInteger mod = new BigInteger("big int value");

以下 using 指令是必需的:

The Following using directives are required:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Math;

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

Which can be obtained from the bouncycastle site. http://www.bouncycastle.org/csharp/

这篇关于使用 Bouncy Castle 进行 C# RSA 解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)