【发布时间】:2021-12-24 15:50:19
【问题描述】:
在 C# 中找到 BouncyCastle 的文档非常困难。
这个link points to a solution 是用 Java 编写的。我似乎无法将其转换为 C#。它可以工作,但不能在 C# 中使用。
谁能帮我把代码转换成 C# BouncyCastle?
Java 代码:
import java.math.BigInteger;
import java.security.SecureRandom;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.crypto.generators.DHParametersGenerator;
import org.bouncycastle.crypto.params.DHParameters;
import org.bouncycastle.util.encoders.Base64;
public class OpenSSLDHParamClone
{
public static void main(String[] args) throws Exception
{
DHParametersGenerator generator = new DHParametersGenerator();
generator.init(1024, 80, new SecureRandom());
DHParameters params = generator.generateParameters();
// Generator G is set as random in params, but it has to be 2 to conform to openssl
DHParameters realParams = new DHParameters(params.getP(), BigInteger.valueOf(2));
ASN1EncodableVector seq = new ASN1EncodableVector();
seq.add(new DERInteger(realParams.getP()));
seq.add(new DERInteger(realParams.getG()));
byte [] derEncoded = new DERSequence(seq).getDEREncoded();
System.out.println("-----BEGIN DH PARAMETERS-----");
String b64Encoded = new String(Base64.encode(derEncoded), "US-ASCII");
while (b64Encoded.length() > 0) {
int subStringLength = Math.min(64, b64Encoded.length());
System.out.println(b64Encoded.substring(0, subStringLength));
b64Encoded = b64Encoded.substring(subStringLength);
}
System.out.println("-----END DH PARAMETERS-----");
}
}
本质上它需要和 OpenSSL 命令做同样的事情:
openssl dhparam -out dhparam.pem 2048
【问题讨论】:
-
您几乎可以 1:1 移植代码。 BC/C# 命名与 BC/Java 命名基本相同,区别主要在于大小写或使用 IntelliSense 可以轻松识别。
标签: java c# bouncycastle