使用jsrsasign签名后验证无效

时间:2016-02-29 19:35:04

标签: javascript encryption digital-signature rsa-sha256

我有一个html文件,用于使用jsrsasign库测试签名和验证。我使用2048 RSA密钥对字符串进行签名。然后我转身验证签名。这是我的代码:

// 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)规范来初始化密钥。但是当我测试加密和解密时,同样的密钥也起作用了。

1 个答案:

答案 0 :(得分:1)

事实证明我没有正确构建我的密钥。我正在使用Microsoft XML规范来构建各个部分。我的错误是当我调用parseBigInt()时我没有将基数指定为16,因此所有算术都关闭了。一旦我拥有了钥匙,一切都或多或少地落到了位置。