【发布时间】:2022-09-25 20:14:49
【问题描述】:
我正在使用 .net 6 中的特定私钥实现用于签署 xml 文档的代码
使用算法 ECDSA
曲线 secp256k1 我的 .net6
代码 :
ECDsaCng key = new ECDsaCng();
key.ImportECPrivateKey(Convert.FromBase64String(privatKey), out _);
SignedXml signer = new SignedXml(doc);
signer.SigningKey = key;
signer.KeyInfo = new KeyInfo();
KeyInfoX509Data keydata = new KeyInfoX509Data(signingCertificate);
signer.KeyInfo.AddClause(keydata);
它适用于我
但问题是我需要使用 4.7 .net 框架做同样的实现,我试过了
ECParameters p = new ECParameters {
Curve = ECCurve.NamedCurves.nistP256,
D = Convert.FromBase64String(privatKey),
Q = new ECPoint() {
X= z.Skip(1).Take(32).ToArray(),
Y = z.Skip(33).ToArray()
}
};
ECDsaCng key = (ECDsaCng)ECDsaCng.Create(p);
SignedXml signer = new SignedXml(doc);
signer.SigningKey = key;
signer.KeyInfo = new KeyInfo();
KeyInfoX509Data keydata = new KeyInfoX509Data(signingCertificate);
signer.KeyInfo.AddClause(keydata);
现在我面临几个问题
1- 我在命名曲线中找不到 secp256k1
2- 它抛出错误,因为 Q.x,Q.y,D 的长度不同
3-我使用的证书包括我的公钥
注意我的 privateKey 存储为 base64 字符串
那么有没有办法让它工作? 我在正确的道路上吗?
是否有任何将此键字符串附加到 X509Certificate2 对象并使用
signer.SigningKey = X509Cetrifcate2.Privatekey;
代替
signer.SigningKey = key;
它会起作用吗?
请告诉我
-
尝试框架 4.7.2,它修复了 4.7 的一些加密问题。