gpt4 book ai didi

c# - 如何在 C# 中使用私钥? "Cannot find the requested object."

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:30 25 4
gpt4 key购买 nike

我正在尝试为 MasterCard Match 实现身份验证,作为他们以下文档的一部分,他们有一个示例私钥:

https://developer.mastercard.com/portal/display/api/OAuth+Validation

在那个页面上,他们有两个版本的 key ,一个是 base64 编码文本,在页面上可见,另一个是可下载的 .p12 文件。

如何导入此 key 以用作 x509certificate2?

无论我尝试什么,我都会收到消息“找不到请求的对象。”。

我试着用 .net 源代码深入研究它,但我在导入的对象上遇到了死胡同

[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint _QueryCertFileType(string fileName);

我尝试了以下方法,但都失败了,并显示了上述相同的消息

new X509Certificate2(@"c:\test\mc-openapi-csr.pem")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mcapi")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mckp")

所以我将文本 block 复制到“copied.txt”,并尝试使用该文件,我也尝试读取字节,并手动传递它们,我也尝试使用

X509Certificate.CreateFromCertFile(fileName)

包含两个文件。

有什么想法吗?证书不好吗?我用错类了吗?该错误消息是什么意思?

--更新--在 Bad Zombie 的建议下,我尝试了 BouncyCaSTLe:

    var pem = new Org.BouncyCastle.OpenSsl.PemReader(File.OpenText(fileName));
RsaPrivateCrtKeyParameters rsaParameters = (RsaPrivateCrtKeyParameters)pem.ReadObject();
using (var rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(new RSAParameters
{
DP = rsaParameters.DP.ToByteArray(),
DQ = rsaParameters.DQ.ToByteArray(),
Exponent = rsaParameters.Exponent.ToByteArray(),
InverseQ = rsaParameters.QInv.ToByteArray(),
Modulus = rsaParameters.Modulus.ToByteArray(),
P = rsaParameters.P.ToByteArray(),
Q = rsaParameters.Q.ToByteArray(),
});
}

在“ImportParameters”调用中,我得到“Bad Data”。我做错了什么吗?

最佳答案

我记不清了,但我相信 pem 文件不能用。你需要类似 bouncy castle 的东西.

我记不太清了,但它会加载 PEM 文件。偶尔它不会喜欢它,但它有点罕见。我不知道它是否可以使用,但我知道我成功地使用了它的私钥/公钥。我不知道如何将它转换为适用于 .NET ssl 库的东西。

不过,我建议如果您使用的是 .net 实现而不是 bouncy caSTLe,则将其转换为 pem 以与 .NET 实现更兼容。我使用了 bouncycaSTLe,它适用于我的项目,不需要与另一个库交互。

using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
using System.IO;
using System.Security.Cryptography;

//elsewhere

using (var reader = File.OpenText(fileName))
{
var pemReader = new PemReader(reader);
var bouncyRsaParameters = (RsaPrivateCrtKeyParameters)pemReader.ReadObject();
var rsaParameters = DotNetUtilities.ToRSAParameters(bouncyRsaParameters);
this.PrivateKey = new RSACryptoServiceProvider();
this.PrivateKey.ImportParameters(rsaParameters);
}

关于c# - 如何在 C# 中使用私钥? "Cannot find the requested object.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13754685/

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