【问题标题】:Generating RSA-SHA1 signatures with JavaScript使用 JavaScript 生成 RSA-SHA1 签名
【发布时间】:2012-02-18 11:21:01
【问题描述】:

我想使用RSA-Sign JavaScript Library 生成 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 编码):

Nzk1ZDE5YWMzZWQ5YWQzYjJlY2M3MWQ4NGIwMmRmNTA5ODU3YjhjZjdhMGZhNjcy
MjMzMGY5MTQ1YTYxY2M3Ng0KY2E0NWEzYjg0Y2M3OTM0N2I2Yzk4ZTRiOGY4OWJm
YTUxMWM3MGNlZWRlOTgzNDNiZDE4MGUxZjI1YzkwZDU2NQ0KOTQxMzgzOTFiODBm
ODhlNzE5NTk4ZTgxZWJhZDhiNTdhZDA4MmE0YmIxYmQ1MTk3N2IxZjI0NWZlYjIy
NTgwMA0KMDI2N2EzYmMxNmViMTA2ZmE3ZjBiZjg2NzgzZTk1Nzc3NzI3Nzk2ZWU0
ZDkxOTJjOWUxZmJmMDU2OWU3NDc3Nw==

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

这可能是因为使用了 SHA1 实现吗?在这种情况下,我可以尝试使用另一个。

我不是密码学专家,但 OAuth RFC 5849 是 saying 需要使用 RSASSA-PKCS1-V1_5-SIGN,图书馆似乎就是这种情况。

非常感谢。

【问题讨论】:

    标签: javascript oauth cryptography rsa sha1


    【解决方案1】:

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

    我从您的帖子中注意到的一件事是,从库生成的 base64 编码结果太长而且看起来不对。您是否可能不对二进制签名进行 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_encoded_signature”的值与从 openssl 命令得到的值进行比较,它们应该是相同的。

    【讨论】:

    • 抱歉回复晚了。是的,显然我是在对十六进制字符串进行编码,而不是先将它们转换为字节。非常感谢!
    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 2021-03-31
    • 2017-07-30
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多