我正在使用jsrsasign,之前我生成了RSA公钥和私钥。我使用以下代码生成了一个签名。
var key = new RSAKey();
key.readPrivateKeyFromPEMString($("#private")[0].value); // "private" is a textarea containing the PEM encoded private key.
var sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa"});
sig.initSign(key);
sig.updateString('message');
var sigValueHex = sig.sign();
这产生了预期的十六进制签名。jsrsasign文档提供以下代码来验证签名。
var sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa"});
sig.initVerifyByCertificatePEM("-----BEGIN CERTIFICATE-----(snip)");
sig.updateString('message');
var isValid = sig.verify(sigValueHex);
我的问题是我没有证书来验证。
sig.sign()
只提供签名,没有证书。还有一个看起来很有前途的方法是 sig.initVerifyByPublicKey(RSAKey)
。但是,RSAKey 只有获取私钥而不是公钥的方法。所以,我的问题是如何获取这个证书?如果我不能,如何从我的公钥获得 RSAKey 对象?如果我不能做到那样,是否有更好的方法来使用 JavaScript 进行数字签名?
我正在使用 jsrsasign 和 jQuery。http://kjur.github.io/jsrsasign/ 如果我正在使用的方法无法解决这个问题,是否有更好的方法?我的主要目标是能够向服务器发送消息,并确保消息未被篡改并且来自正确的位置。SSL 在此处不可用。消息不需要加密,只需要保护。