使用JavaScript生成RSA-SHA1签名

使用JavaScript生成RSA-SHA1签名,javascript,oauth,cryptography,rsa,sha1,Javascript,Oauth,Cryptography,Rsa,Sha1,我想使用生成RSA-SHA1签名。具体来说,我想用它来签署OAuth请求 但是,JavaScript库生成的签名看起来与我可以生成的签名不同,例如使用 $ echo -n "x" | openssl dgst -sha1 -sign priv.key -binary | openssl base64 | xargs echo -n eV0ZrD7ZrTsuzHHYSwLfUJhXuM96D6ZyIzD5FFphzHbKRaO4TMeTR7bJjkuPib+l EccM7t6YNDvRgOHyXJ

我想使用生成RSA-SHA1签名。具体来说,我想用它来签署OAuth请求

但是,JavaScript库生成的签名看起来与我可以生成的签名不同,例如使用

$ echo -n "x" | openssl dgst -sha1 -sign priv.key -binary | openssl base64 | xargs echo -n
eV0ZrD7ZrTsuzHHYSwLfUJhXuM96D6ZyIzD5FFphzHbKRaO4TMeTR7bJjkuPib+l
EccM7t6YNDvRgOHyXJDVZZQTg5G4D4jnGVmOgeuti1etCCpLsb1Rl3sfJF/rIlgA
AmejvBbrEG+n8L+GeD6Vd3cneW7k2Rksnh+/BWnnR3c=
相反:这是库生成的内容(base64编码):

(当然,假设输入和键相同)

这是否可能是因为使用了SHA1实现?那样的话,我可以试着用另一个

我不是密码学专家,但是OAuth RFC 5849需要使用RSASSA-PKCS1-V1_5-SIGN,这似乎是库的情况


非常感谢。

我尝试了上面提到的openssl命令和JS库,结果是一致的。我从两方面得到的签名是一样的

我从你的帖子中注意到,从库中生成的base64编码结果太长,看起来是错误的。是否可能您不是base64编码二进制签名

function doSign() {
  var rsa = new RSAKey();
  rsa.readPrivateKeyFromPEMString(document.form1.prvkey1.value); //replace with your private key
  var hSig = rsa.signString("x", "sha1");
  var base64_encoded_signature = hex2b64(hSig);
}
您可以尝试使用此代码获取签名的base64编码字符串吗

function doSign() {
  var rsa = new RSAKey();
  rsa.readPrivateKeyFromPEMString(document.form1.prvkey1.value); //replace with your private key
  var hSig = rsa.signString("x", "sha1");
  var base64_encoded_signature = hex2b64(hSig);
}

如果您将“base64\u编码的\u签名”的值与从openssl命令中获得的值进行比较,它们应该是相同的。

很抱歉回复太晚。是的,显然我是在编码十六进制字符串,而不是先把它们转换成字节。非常感谢你!