当前位置: 首页 > 知识库问答 >
问题:

使用Bouncy Castle实现C#RSA解密

郑翰海
2023-03-14
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);
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");
IAsymmetricBlockCipher signer = new Pkcs1Encoding(new RsaEngine());
signer.Init(true, pubParameters);
ProcessBlock(byte[] inbuf, int inOff, int inLen);

如有任何帮助,我们将不胜感激。

共有1个答案

璩珂
2023-03-14

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

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值:

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

以下using指令是必需的:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Math;
 类似资料:
  • 我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:

  • 我们需要从RSA密钥中获取模和指数。我使用以下方法创建了我的pubilc密钥。请让我知道我们如何从中提取模数和指数部分。我已经读过这篇文章了。 //现在我想从这个公钥中得到模和指数 编辑:-我也已经发送Base64字符串到服务器,但在那里,我们面临着一个相当大的问题,找到公钥ref从Base64字符串 C#代码段 现在我们需要无法解析的公钥组件。任何帮助都很好

  • 我正在做一个简单的程序来加密/解密使用RSA算法在Java。我创建一个密码对象如下: 我通过调用加密函数进行加密: 解密过程如下: 但是,当我将创建密码对象的代码编辑为://Create a Cipher object Cipher rsapier=Cipher时。getInstance(“RSA”); 问题出在哪里。在第一种情况下(当空格出现时),我指定了NoPadd?为什么空格出现在解密的消息

  • 我正在消耗一个外部API,它返回给我一个河豚加密的JSON数组。首先,我试图使用BountyCastle包实现Blowfish加密/解密方法,该包基于这篇文章c#Bouncy Castle Blowfish Decryption-Pad块损坏。 现在我想解密API响应。Api返回给我以下Blowfish加密的JSON正文内容 $-1$cb8ba9e30b19ff2a$d1157421764fe50

  • 我一直在搜索,但我似乎找不到一个简单的方法解密使用RSA。 我生成了一个公钥和私钥,它们存储在两个单独的文件中,并且是XML格式的。使用FromXmlString将公钥关联到RSACryptoServiceProvider对象,然后加密一个字符串,这一点没有问题。当我试图解密一个加密的字符串时,我的困惑就来了。我不确定如何将私钥数据与RSACryptoServiceProvider关联,以便使用D