如何在 Javascript/jquery 上使用 RSA 私钥签署数据

How to sign data with RSA private Key on Javascript/jquery

我得到了这个 C# 代码,但我需要它在 Javascript 中完成。我的想法是我需要在浏览器没有网络的情况下执行这段代码,基本上,我必须在本地存储中保存一些数据,然后使用它们来执行这个方法来生成私钥。

private static string SignData(string ppath,string ppass)
{
    X509Certificate2 keyStore = new X509Certificate2(ppath, ppass);
    RSA privateKey = keyStore.GetRSAPrivateKey();
    byte[] iicSignature = privateKey.SignData(Encoding.ASCII.GetBytes(pConcat), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

    byte[] iic = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(iicSignature);
    return BitConverter.ToString(iic).Replace("-", string.Empty);
}

P.S: 我设法提取私钥并将其保存到本地storage.Now我需要用这个密钥、SHA256算法和pkcs1填充来签署一些数据。

首先使用Bouncy Castle从证书中提取您的私钥并将其转换为pkcs8。

然后您将需要找到一个 javascript 库,它使用私钥对数据进行签名。我建议您使用大多数浏览器都支持的 window.crypto 库。它有一个名为 window.crypto.subtle.sign() 的方法,它使用私钥对数据进行签名,您必须使用 window.crypto.subtle.importKey() 导入您可以阅读更多 here 关于这个库的信息。

最后,您需要一个 md5 库来散列签名数据。你可以发现 here.

这主要是您在 this chat 中谈到的内容。