使用jsrsasign签名后验证不起作用
问题描述:
我有一个html文件来测试使用jsrsasign库的签名和验证。我使用2048 RSA密钥来签署一个字符串。然后我转过身来验证签名。这是我的代码:使用jsrsasign签名后验证不起作用
// initialize
var hex = "48656c6c6f20776f726c6421"; // "Hello world!"
var sig = new KJUR.crypto.Signature({"alg": "SHA256withRSA", "prov": "cryptojs/jsrsa"});
// initialize for signature generation
sig.initSign(this.key); // at this point the key is a private key
// update data
sig.updateHex(hex);
// calculate signature
var sigValueHex = sig.sign();
...
// initialize
var sig = new KJUR.crypto.Signature({"alg": "SHA256withRSA", "prov": "cryptojs/jsrsa"});
// initialize for signature validation
sig.initVerifyByPublicKey(this.key); // at this point the key is a public key
// update data
sig.updateHex(hex);
// verify signature
var isValid = sig.verify(sigValueHex);
// at this point isValid is still false
我在做什么错?我将代码追溯到名为“_rsasign_getAlgNameAndHashFromHexDisgestInfo”的方法调用。当它将摘要信息头与消化的十六进制字节的头部进行比较时,它们不匹配,因此验证失败。我签名的方式有什么问题吗?我没有使用PEM(ASN.1/DER)规范来初始化密钥。但是,当我测试加密和解密时,相同的密钥起作用。
答
事实证明,我并没有正确构建我的钥匙。我使用Microsoft XML规范构建了这些部分。我的错误是当我调用parseBigInt()时,我没有指定基数为16,所以所有的算术都关闭了。一旦我拥有了关键权利,一切都或多或少地落空了。