我得到了这个 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 中谈论的内容。