![](/img/trans.png)
[英]Digital Signature Verification using BouncyCastle - ECDSA with SHA 256, C#
[英]Digital signature in c# without using BouncyCastle
在不使用第三方BouncyCastle库的情况下,有没有办法读取自定义私钥并对消息签名? (使用私钥进行sha256哈希+加密)
从技术上讲,是的。 根据您拥有哪种键,答案会变得更加棘手。
编辑(2019年10月):. NET Core 3.0以DER编码(相对于PEM编码)形式对所有这些格式均提供内置支持。 我在每种文件格式的子标题后添加.NET Core 3.0+答案。
如果您拥有这种类型的文件,并且您使用的是.NET 4.6或更高版本,则可以。 您需要具有DER编码(相对于PEM编码)的数据blob(如果是PEM,请参见下文)。
using (CngKey key = CngKey.Import(blob, CngKeyBlobFormat.Pkcs8PrivateBlob))
using (RSA rsa = new RSACng(key))
{
return rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
RSA需要4.6,ECDSA需要4.6.1,DSA需要4.6.2。
ImportPkcs8PrivateKey
方法在AsymmetricAlgorithm
上声明,并且所有非对称内置类型( RSA
, DSA
, ECDsa
, ECDiffieHellman
)都支持该方法。
using (RSA rsa = RSA.Create())
{
rsa.ImportPkcs8PrivateKey(blob, out _);
return rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
恭喜,您的私钥传输很强大。 可悲的是,如果您想实际处理它,则需要编写最大数量的代码。 您不想处理它。 你真的,真的,想要
请参阅如何在pem证书中加密私钥? ,然后继续进行下一部分的入门。 但是,您要做的工作比谈论的要多得多。 您需要阅读文件,了解加密方案和参数,解密Blob,然后使用CNG读取PKCS#8,或者只是继续钻探兔子洞并享受文件解析器的乐趣。
ImportEncryptedPkcs8PrivateKey
方法在AsymmetricAlgorithm
上声明,并且所有非对称内置类型( RSA
, DSA
, ECDsa
, ECDiffieHellman
)都支持该方法。
using (RSA rsa = RSA.Create())
{
rsa.ImportEncryptedPkcs8PrivateKey(password, blob, out _);
return rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
不幸的是,“相对简单”和“相对困难”的融合被数学专业的学生称为“留给读者的练习”。
强烈考虑使用EncryptedPrivateKeyInfo的PFX方法。 或者,您可以在自定义代码中执行此操作。 自定义代码? 好吧,让我们这样做。 此时您需要的参考文本是
好吧,让我们继续。
byte[]
作为键对象。 对于步骤4,有些事情要小心。 具体来说,ASN.1 / DER INTEGER组件具有RSAParameters不喜欢的两个规则。
.NET希望这些值成为具有以下关系的大端字节数组(与DER编码的字节顺序相同):
ImportRSAPrivateKey
方法在RSA
上声明,并且由于它解析数据并调用ImportParameters
因此它适用于所有RSA
派生类型(假设它们已经支持参数导入)。
using (RSA rsa = RSA.Create())
{
rsa.ImportRSAPrivateKey(blob, out _);
return rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
确定哪种RFC为您的密钥格式定义了ASN.1结构,然后牢记这一点并评估RSAPrivateKey部分。
DSAParameters和ECParameters每个都有自己的空间期望。
其中一些包括并非总是优雅但经常运行的代码:
Microsoft提供了一个SignedXML类来对文件进行签名。 要了解更多信息,请检出https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.xml.signedxml(v=vs.110).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.