2012-01-25 5 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= 

으로 :

Nzk1ZDE5YWMzZWQ5YWQzYjJlY2M3MWQ4NGIwMmRmNTA5ODU3YjhjZjdhMGZhNjcy 
MjMzMGY5MTQ1YTYxY2M3Ng0KY2E0NWEzYjg0Y2M3OTM0N2I2Yzk4ZTRiOGY4OWJm 
YTUxMWM3MGNlZWRlOTgzNDNiZDE4MGUxZjI1YzkwZDU2NQ0KOTQxMzgzOTFiODBm 
ODhlNzE5NTk4ZTgxZWJhZDhiNTdhZDA4MmE0YmIxYmQ1MTk3N2IxZjI0NWZlYjIy 
NTgwMA0KMDI2N2EzYmMxNmViMTA2ZmE3ZjBiZjg2NzgzZTk1Nzc3NzI3Nzk2ZWU0 
ZDkxOTJjOWUxZmJmMDU2OWU3NDc3Nw== 

이인지 것이 가능하며 (물론, 동일한 입력 & 키를 가정)이 라이브러리 (base64 인코딩)를 생성 무엇 SHA1 구현이 사용 되었기 때문에? 이 경우 다른 것을 사용하려고 할 수 있습니다.

저는 암호 전문가가 아니지만 OAuth RFC 5849는 RSASSA-PKCS1-V1_5-SIGN을 사용할 필요가있는 saying입니다. 이는 라이브러리의 경우 인 것 같습니다.

대단히 감사합니다.

답변

3

위에서 언급 한 openssl 명령과 JS 라이브러리를 모두 시도했는데 그 결과는 일관성이 있습니다. 두 가지 방법에서 얻은 서명은 같습니다.

게시물에서 내가 알아챈 한 가지는 라이브러리에서 생성 된 base64 인코딩 결과가 너무 길어서 잘못 보입니다. 바이너리 서명을 base64 인코딩하지 않았을 가능성이 있습니까?

base64로 인코딩 된 서명 문자열을 가져올 수 있습니까? 당신은 openssl 명령에서 무엇을 얻을에 "base64_encoded_signature"의 값을 비교하면

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

, 그들은 동일해야합니다.

+0

늦게 회신하여 죄송합니다. 예, 분명히 16 진수 문자열을 먼저 바이트로 변환하는 대신 인코딩했습니다. 고마워요! – Simon

관련 문제