要使用OpenSSL生成私钥和公钥,我已经运行
openssl ecparam -genkey -name secp256k1 -out private-key.pem
openssl ec -in private-key.pem -out public-key.pem -pubout
我将公钥上传到远程服务器。然后将private-key.pem
导入。Net Framework(它必须是。Net Framework)C#服务使用它来签署API有效负载:
public string LoadFromCng(byte[] request, string privateKeyFile)
{
CngKey cng = CngKey.Open(privateKeyFile);
// Sign the request body with the private key.
ECDsaCng dsa = new ECDsaCng(cng);
byte[] signedRequest = dsa.SignData(request, HashAlgorithmName.SHA256);
return Convert.ToBase64String(signedRequest);
}
用privateKeyFile=private-key.pem
上面的代码给出Keyset不存在
如果我使用mkcert
并运行mkcert-ecdsa-pkcs12private-key.pem
它会生成一个名为private-key.pem.p12
的PKCS#12密钥,然后:
public string LoadFromX509(byte[] request, string privateKeyFile)
{
var cert = new X509Certificate2(privateKeyFile, "changeit");
var key = cert.GetECDsaPrivateKey();
byte[] signedRequest = key.SignData(request, HashAlgorithmName.SHA256);
return Convert.ToBase64String(signedRequest);
}
使用<code>privateKeyFile=private-key.pem。p12上面的代码似乎对请求进行了签名,但API响应为远程服务器返回了一个错误:(400)错误请求
,这意味着API提供程序无法从公钥中解码有效负载。
在这里查看备忘单并创建X509 pfx证书时,我也会遇到同样的400错误。
openssl req -new -x509 -key private-key.pem -out cert.pem -days 360
openssl pkcs12 -export -inkey private-key.pem -in cert.pem -out cert.pfx
上面的方法似乎对有效负载进行签名,但提供者以400响应。
这里、这里、这里、这里和其他地方的建议都不起作用。
我不能使用NETCore或NET5,因此这也不起作用。
ImportPkcs8PrivateKey
方法在.Net Framework中不可用。
如果我尝试在这里使用Bouncy Castle per,我会发现<code>无法强制转换类型为'Org.BouncyCastle.Crypto.Parameters'的对象。ECPrivateKeyParameters'输入“Org.BouncyCastle.Crypto.Parameters.rsPrivateCrTKeyParameter”
第一个OpenSSL语句创建一个EC参数文件private-key.pem,其中包含一个SEC1格式的PEM编码私有EC密钥。
使用.NET Framework,最简单的方法是使用BouncyCastle进行密钥导入。BouncyCastle 还支持 ASN.1/DER 格式和 IEEE P1363 (r|s) 格式用于 EC 签名。
以下代码以SEC1格式导入PEM编码的私有EC密钥并对消息进行签名。
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities.Encoders;
...
string pkcs8 = @"-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIMmN/YG6BtIqm9eAcYtKdcbJosNKbB76vGMTSltPLNiioAcGBSuBBAAK
oUQDQgAESGnGxuBPdrwv1TkJEorsaNk74+ZFh2jzww2SpLTqQqkvOf5IP6fuODS/
hzztSBpsBpX9LUZh8TYHX0HRMagkaA==
-----END EC PRIVATE KEY-----";
TextReader privateKeyTextReader = new StringReader(pkcs8);
AsymmetricCipherKeyPair privateKeyParams = (AsymmetricCipherKeyPair)new PemReader(privateKeyTextReader).ReadObject();
byte[] message = Encoding.UTF8.GetBytes("The quick brown fox jumps over the lazy dog");
ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA"); // ASN.1/DER format
//ISigner signer = SignerUtilities.GetSigner("SHA-256withPLAIN-ECDSA"); // r|s format
signer.Init(true, privateKeyParams.Private);
signer.BlockUpdate(message, 0, message.Length);
byte[] signature = signer.GenerateSignature();
Console.WriteLine(Hex.ToHexString(signature)); // 3046022100967c2e890d933c75468dceaf61152add41f143568dcb967583e1b307a0b495e30221008f6837c0d9cc01fc7bfe54ed5b6267fd3e64c2d3ff771e72762f24c20071c454
我想通过RSACryptServiceProvider签名和验证数据 为此,我需要公钥和私钥。 在我的项目中,我将公钥和私钥存储在XML文件中。 有一次,我生成了我的公钥和私钥 在上面,我展示了“通过公钥验证数据” 我的SignData方法类似。 在那里, 我的问题是:举个例子,我认识到;通过crt/pem/cert等导入公钥和私钥。证书文件。在那里我存储了XML文件。 我的解决方案错了吗? 第二
我有这样的代码来导入一个ECDH键: 这是可行的,但是它只返回私钥,而不是整个密钥对。如何从私钥中导出公钥?
我有一个由openssl以以下方式生成的密钥对 openssl genrsa-out private_key.pem 2048 所以我的问题是如何使用KeyTool将现有密钥导入到BKS密钥库中? 谢谢
小问题:如何使进口证书(pfx)不可出口? 是不支持这种场景还是我们缺少了什么?提前道谢!
我试图从私钥中生成一个公共ECDSA密钥,但我还没有在互联网上找到多少关于如何实现这一点的帮助。几乎所有的事情都是为了从公钥规范生成公钥,我不知道如何得到它。到目前为止,我总结了以下内容: 但是,在运行时,我会出现以下错误: 我做错了什么?有更好/更简单的方法吗? 编辑:我已经设法编译了一些代码,但它不能正常工作: 当我运行它时,它会生成一个公钥,但它不是私钥对应的公钥。
我正在尝试在BouncyCastle中导入公共和私有ECDH密钥。为了导入公钥,我使用了下面的C#代码,代码运行良好: 公钥:042E3E5CCF6B9AB04BE7A22F3FACCDE73C87E87155394A34815408A896CA18A374DAC669AF36220FC863767F4AF47507C5BC221FC4A19874DAF39B074E3EB8 私钥:be3f9bf