我正在使用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进行数字签名?
如果无法使用我使用的方法来执行此操作,是否有更好的方法?我在这里的主要目标是能够将消息发送到服务器,并确保该消息未被篡改并且来自正确的位置. SSL不是此处的选项.消息不需要加密,只需保护即可.