javascript - 如何在 Javascript/jquery 上使用 RSA 私有 Key 对数据进行签名

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

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:我设法提取了私有 key 并将其保存到本地存储。现在我需要使用此 key、SHA256 算法和 pkcs1 填充对一些数据进行签名。

回答1

首先使用 https://www.bouncycastle.org/ 从证书中提取您的私有 key 并将其转换为 pkcs8。

然后,您将需要找到一个 javascript 库,它使用私有 key 对数据进行签名。我建议您使用大多数浏览器都支持的 window.crypto 库。它有一个名为 window.crypto.subtle.sign() 的方法,它使用私有 key 对数据进行签名,您必须使用 window.crypto.subtle.importKey() 导入您可以在 https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle 阅读有关此库的更多信息。

最后,您将需要一个 md5 库来散列签名数据。您可以在http://www.myersdaily.org/joseph/javascript/md5.js

这主要是您在https://chat.stackoverflow.com/rooms/244738/discussion-between-shatsuki-and-topaco 中谈论的内容。

相似文章

随机推荐

最新文章