gpt4 book ai didi

使用 Bouncy CaSTLe 的 C# RSA 解密

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:17 26 4
gpt4 key购买 nike

我得到了一个 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);

我需要使用 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");

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

我得到了模数公共(public)指数私有(private)指数素数P素数q素数指数p素数指数qcrt系数

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

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

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

我唯一能用的方法是

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

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

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

最佳答案

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

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;

可以从 bouncycaSTLe 站点获得。 http://www.bouncycastle.org/csharp/

关于使用 Bouncy CaSTLe 的 C# RSA 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com