2012-01-25 17 views
5

Mi piacerebbe generare firme RSA-SHA1 con RSA-Sign JavaScript Library. In particolare, mi piacerebbe usarlo per firmare le richieste OAuth.Creazione di firme RSA-SHA1 con JavaScript

Tuttavia, la firma generata dalla libreria JavaScript è diversa da quella che posso generare, ad es. con

$ echo -n "x" | openssl dgst -sha1 -sign priv.key -binary | openssl base64 | xargs echo -n 
eV0ZrD7ZrTsuzHHYSwLfUJhXuM96D6ZyIzD5FFphzHbKRaO4TMeTR7bJjkuPib+l 
EccM7t6YNDvRgOHyXJDVZZQTg5G4D4jnGVmOgeuti1etCCpLsb1Rl3sfJF/rIlgA 
AmejvBbrEG+n8L+GeD6Vd3cneW7k2Rksnh+/BWnnR3c= 

Al contrario: questo è ciò che la biblioteca genera (base64):

Nzk1ZDE5YWMzZWQ5YWQzYjJlY2M3MWQ4NGIwMmRmNTA5ODU3YjhjZjdhMGZhNjcy 
MjMzMGY5MTQ1YTYxY2M3Ng0KY2E0NWEzYjg0Y2M3OTM0N2I2Yzk4ZTRiOGY4OWJm 
YTUxMWM3MGNlZWRlOTgzNDNiZDE4MGUxZjI1YzkwZDU2NQ0KOTQxMzgzOTFiODBm 
ODhlNzE5NTk4ZTgxZWJhZDhiNTdhZDA4MmE0YmIxYmQ1MTk3N2IxZjI0NWZlYjIy 
NTgwMA0KMDI2N2EzYmMxNmViMTA2ZmE3ZjBiZjg2NzgzZTk1Nzc3NzI3Nzk2ZWU0 
ZDkxOTJjOWUxZmJmMDU2OWU3NDc3Nw== 

(assumendo la stessa chiave di ingresso &, ovviamente)

E 'possibile che questo a causa dell'implementazione SHA1 utilizzata? In tal caso, potrei provare a usarne un altro.

Non sono esperto di crittografia, ma l'OAuth RFC 5849 è saying che RSASSA-PKCS1-V1_5-SIGN deve essere utilizzato, il che sembra essere il caso per la libreria.

Grazie mille.

risposta

3

Ho provato sia il comando openssl che la libreria JS che hai menzionato sopra, ei risultati sono coerenti. Le firme che ottengo da entrambi i modi sono le stesse.

Una cosa che ho notato dal tuo post è che il risultato codificato base64 generato dalla libreria è troppo lungo e sembra sbagliato. È possibile che tu non stia codificando in base64 la firma binaria?

Provare questo codice per ottenere la stringa codificata base64 della firma?

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); 
} 

Se si confronta il valore di "base64_encoded_signature" con quello che si ottiene dal comando openssl, che dovrebbe essere lo stesso.

+0

Ci scusiamo per la risposta tardiva. Sì, a quanto pare stavo codificando la stringa esadecimale invece di convertirli prima in byte. Grazie mille! – Simon

Problemi correlati