- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 BouncyCaSTLe 创建了椭圆曲线 DSA 签名的 key 对,并设法使用 XMLString 根据 RFC4050 将公钥导入到 ECDsaCng 中。 。现在我也想移动私钥,但还没有找到解决方案。我得到的最接近的是使用 CngKey.Import。
CngKey.Import 支持 PKCS#8 格式,因此如果您可以将 key 放入有效的 pkcs8 中,那么它应该可以工作。不幸的是,下面的代码不太有效。
var privatekey = (ECPrivateKeyParameters) keyPair.Private;
var pkinfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privatekey);
byte[] pkcs8Blob = pkinfo.GetDerEncoded();
var importedKey = CngKey.Import(pkcs8Blob, CngKeyBlobFormat.Pkcs8PrivateBlob);
这会引发异常:
System.Security.Cryptography.CryptographicException: ASN1 bad tag value met.
据我所知,GetDerEncoded 应该返回一个有效的 Pkcs8 blob。
如何在 ECDsaCng 对象中使用 BouncyCaSTLe 创建的私钥?
最佳答案
经过一番绞尽脑汁、阅读 RFC 并研究 BouncyCaSTLe 和 CngKey.Export 生成的字节数组后,我找到了答案。
问题在于 BouncyCaSTLe 如何将 EC key 编码为 DER/Pkcs8 格式。与此特定问题相关的两个 RFC 是 RFC5915(不是标准,而是共识文件)和 RFC5480。他们指出必须使用 RFC5480 中引用的命名曲线来指定曲线参数。当您使用错误的生成器参数创建 AsymmetryCipherKeyPair 时,PKCS8/DER 导出的 BouncyCaSTLe 实现将导出不符合这两个规范的整个曲线规范(隐式曲线)。您必须使用指定命名曲线的 ECKeyGenerationParameters。
在 BouncyCaSTLe 中创建可互操作的 key 时,必须使用以下内容(据我所知):
string namedCurve = "prime256v1";
ECKeyPairGenerator pGen = new ECKeyPairGenerator();
ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(
X962NamedCurves.GetOid(namedCurve)
new SecureRandom());
pGen.Init(genParam);
AsymmetricCipherKeyPair keyPair = pGen.GenerateKeyPair();
可以通过使用 Der 编码字节导入 key 来创建 CngKey:
var bcKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keyPair.Private);
var pkcs8Blob = bcKeyInfo.GetDerEncoded();
var importedKey = CngKey.Import(pkcs8Blob, CngKeyBlobFormat.Pkcs8PrivateBlob);
关于.net - 从 BouncyCaSTLe 导出 EC 私钥并导入到 CngKey 或 ECDsaCng 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414125/
我一直在努力思考 ECDsaCng、CngKey 并使用有效的 EC 证书进行签名。该证书由“Symantec Class 3 ECC 256 bit Extended Validation CA”颁
我正在寻找一种跨平台方式来共享 ECDSA 签名的公钥。从性能的 Angular 来看,我使用 CngKey 和标准 .NET 加密库做了一件很棒的事情,但后来我无法弄清楚 33(或 65)字节的公钥
我有一个文件,其中有几个 ECDSA SHA256 公钥。该文件如下所示: KEY_ID: 1 STATUS: VALID -----BEGIN PUBLIC KEY----- MFkwEwYHKoZ
我正在尝试在 C# 程序集(针对 .NET 4.0)中动态(以编程方式)生成自签名证书,以用作生成其他证书的根 CA。证书不需要保存在 Windows 证书存储中,我会将其导出为文件。 通读this
上下文:VS 2015 winforms,Windows 7,使用 SecurityDriven Inferno 库。 我正在编写一个离线应用程序,它生成加密文件作为电子邮件附件发送(因此不在客户端-
var rawData = Convert.FromBase64String(_signingKey); var cng = CngKey.Import(rawData, CngKeyBlobForm
我正在尝试验证已使用 ECDsa 算法签名的 XML 签名。我的工作基于 XmlDSigEx 库,我必须稍微修改它以满足我的需要。 我目前的问题是从证书中获取公钥并将其用作 CngKey。我使用了:
互联网资源似乎少之又少,最好的 MSDN 页面(据我所知)会引发错误! 具体来说,我不确定要创建什么作为 CngKeyCreationParameters 对象... 最佳答案 CngKey : Cn
我有一个导出的 RSAParameters 私钥,我想将其导入另一台机器。我可以将新 key 保存到本地机器或用户容器中,但我无法尝试导入现有 key 。 下面的代码将生成一个新的 key 对,我知道
如何加密导出 CngKey 到 PKCS#8? static void Main(string[] args) { CngKeyCreationParameters ckcPa
如何从基于 ECC 的 X509Certificate2 获取公钥/私钥进入 CngKey用于 ECDsaCng和 ECDiffieHellmanCng ? 我目前正在使用 RSA 2048 位 ke
我需要生成证书签名请求文件,以提交给第三方机构。 我显然遗漏了一条知识,阻止我从我成功创建的 CngKey 和/或 X509Certificate2 对象以及 Base64 中实现认知飞跃-编码的 A
以下行在我的 PC 上成功,但在 Web 主机的服务器上抛出异常: CngKey.Import(EccPrivateBlob, CngKeyBlobFormat.EccPrivateBlob);
我尝试从此代码生成 key CngKey key = CngKey.Import(Convert.FromBase64String(privateKey), CngKeyBlobFormat.Pkcs
我尝试从此代码生成 key CngKey key = CngKey.Import(Convert.FromBase64String(privateKey), CngKeyBlobFormat.Pkcs
给定一个新生成的可导出公钥/私钥对 CngKey 和一个 SecureString,我需要调用哪些 API 来创建包含公钥/私钥的 PFX 文件用密码保护的内容?给定一个 PFX 文件和一个 Secu
作为快速概述,我正在尝试使用 https://github.com/dvsekhvalnov/jose-jwt 通过 C# 生成 ES256 算法 -JWT token 图书馆。 如说明所述: ES2
我已经使用 BouncyCaSTLe 创建了椭圆曲线 DSA 签名的 key 对,并设法使用 XMLString 根据 RFC4050 将公钥导入到 ECDsaCng 中。 。现在我也想移动私钥,但还
这与 .NET/C# 相关。让我们假设在 PFX 或 PKCS#12 文件中有一个证书 + 私钥(P521 ECC 一个)。我们已通过安装将此证书及其私钥加载到 Windows 证书存储中(双击 PF
我正在尝试使用 HTTP/2 APNS 发送 Apple 推送通知。为此,我需要使用证书和加密。我创建 JWT token 的代码: private string CreateJwtToken() {
我是一名优秀的程序员,十分优秀!