使用私钥X509证书签名字符串

时间:2018-02-08 15:20:40

标签: javascript c# rsa digital-signature sha256

我在当前用户存储中拥有X509证书(Windows 10)。验证由RSACryptoServiceProvider在C#/ .NET中生成的JavaScript签名的最简单方法是什么? 我已经有了C#方法:

public static string GetSign(string data, AsymmetricAlgorithm privateKey)
 {
            var rsa = (RSACryptoServiceProvider)privateKey;            
            TextWriter textWriter = new StringWriter();
            CertifycateKeyHelper.ExportPrivateKey(rsa, textWriter);
            RSACryptoServiceProvider rsaClear = new RSACryptoServiceProvider();
            rsaClear.ImportParameters(rsa.ExportParameters(true));
            var signature = rsaClear.SignData(Encoding.UTF8.GetBytes(data), 
               new SHA256CryptoServiceProvider());
            return BytesToHex(signature);
 }

另外,我怎样才能转向另一个方向,生成一个RSA SHA256签名javascript并在C#中使用RSACryptoServiceProvider实例进行验证?

1 个答案:

答案 0 :(得分:1)

首先,您需要一个库来解析X.509证书。然后,您需要一种方法来验证和验证证书或明确信任它(证书固定)。如果您不能信任证书和其中的公钥,那么验证签名是没有意义的;它不会让您信任用它签名的数据。

解析,验证和验证X.509证书并非易事,这意味着您不能没有库。如果您可以固定证书,那么只需从中检索公钥即可逃脱。您还可以使用不同的方法提取公钥并固定(即存储)公钥本身。

在您信任证书后,您可以从中提取公钥并执行签名验证。请注意,M $文档很糟糕,并没有指定签名生成算法。它使用PKCS#1 v1.5填充。

对于签名生成,您需要以安全的方式传输私钥,解析私钥,然后执行签名生成。

StackOverflow不是为您完成的工作,所以我只提供了您需要遵循的步骤。