2012-01-25 34 views
5

我想用RSA-Sign JavaScript Library生成RSA-SHA1簽名。具體來說,我想用它來簽署OAuth請求。用JavaScript生成RSA-SHA1簽名

但是,由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,這似乎就是這種情況。

非常感謝。

回答

3

我試過了上面提到的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的命令得到什麼價值,他們應該是相同的。

+0

對不起,延遲迴復。是的,顯然我編碼的是十六進制字符串,而不是先將它們轉換爲字節。非常感謝你! – Simon