2012-01-25 37 views
5

que me gustaría para generar firmas RSA-SHA1 con el RSA-Sign JavaScript Library. Específicamente, me gustaría utilizar esto para firmar solicitudes de OAuth.firmas RSA-SHA1 Generación con JavaScript

Sin embargo, la firma generada por la biblioteca JavaScript parece diferente a la que puede generar, por ejemplo, con

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

En contraste: Esto es lo que la biblioteca genera (base64 codificados):

Nzk1ZDE5YWMzZWQ5YWQzYjJlY2M3MWQ4NGIwMmRmNTA5ODU3YjhjZjdhMGZhNjcy 
MjMzMGY5MTQ1YTYxY2M3Ng0KY2E0NWEzYjg0Y2M3OTM0N2I2Yzk4ZTRiOGY4OWJm 
YTUxMWM3MGNlZWRlOTgzNDNiZDE4MGUxZjI1YzkwZDU2NQ0KOTQxMzgzOTFiODBm 
ODhlNzE5NTk4ZTgxZWJhZDhiNTdhZDA4MmE0YmIxYmQ1MTk3N2IxZjI0NWZlYjIy 
NTgwMA0KMDI2N2EzYmMxNmViMTA2ZmE3ZjBiZjg2NzgzZTk1Nzc3NzI3Nzk2ZWU0 
ZDkxOTJjOWUxZmJmMDU2OWU3NDc3Nw== 

(suponiendo la misma tecla de entrada &, por supuesto)

¿Es posible que esto es debido a la implementación SHA1 que se utiliza? En ese caso, podría intentar usar otro.

No soy un experto en criptografía, pero el OAuth RFC 5849 es saying que debe utilizarse RSASSA-PKCS1-V1_5-SIGN, lo que parece ser el caso de la biblioteca.

Muchas gracias.

Respuesta

3

He intentado tanto el comando openssl y la biblioteca JS usted ha mencionado anteriormente, y los resultados son consistentes. Las firmas que obtengo de ambas formas son las mismas.

Una cosa que me di cuenta de su post es que, el resultado base64 generado a partir de la biblioteca es demasiado largo y se ve mal. ¿Es posible que no estés codificando base64 la firma binaria?

Podría probar este código para conseguir las cuerdas base 64 de la firma codificados?

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

Si se compara el valor de "base64_encoded_signature", con lo que se obtiene a partir del comando openssl, que debería ser el mismo.

+0

Lo siento por la respuesta tardía. Sí, aparentemente estaba codificando la cadena hexadecimal en vez de convertirlos a bytes primero. ¡Muchas gracias! – Simon