2012-01-25 38 views
5

Tôi muốn tạo chữ ký RSA-SHA1 với RSA-Sign JavaScript Library. Cụ thể, tôi muốn sử dụng điều này để ký yêu cầu OAuth.Tạo chữ ký RSA-SHA1 bằng JavaScript

Tuy nhiên, chữ ký được tạo bởi thư viện JavaScript trông khác với chữ ký tôi có thể tạo, ví dụ: với

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

Ngược lại: Đây là những gì thư viện tạo (mã hóa base64):

Nzk1ZDE5YWMzZWQ5YWQzYjJlY2M3MWQ4NGIwMmRmNTA5ODU3YjhjZjdhMGZhNjcy 
MjMzMGY5MTQ1YTYxY2M3Ng0KY2E0NWEzYjg0Y2M3OTM0N2I2Yzk4ZTRiOGY4OWJm 
YTUxMWM3MGNlZWRlOTgzNDNiZDE4MGUxZjI1YzkwZDU2NQ0KOTQxMzgzOTFiODBm 
ODhlNzE5NTk4ZTgxZWJhZDhiNTdhZDA4MmE0YmIxYmQ1MTk3N2IxZjI0NWZlYjIy 
NTgwMA0KMDI2N2EzYmMxNmViMTA2ZmE3ZjBiZjg2NzgzZTk1Nzc3NzI3Nzk2ZWU0 
ZDkxOTJjOWUxZmJmMDU2OWU3NDc3Nw== 

(giả định cùng quan trọng đầu vào &, tất nhiên)

Có thể rằng đây là vì việc triển khai SHA1 đang được sử dụng? Trong trường hợp đó, tôi có thể thử sử dụng một cái khác.

Tôi không có chuyên gia về mật mã, nhưng OAuth RFC 5849 là saying mà RSASSA-PKCS1-V1_5-SIGN cần được sử dụng, có vẻ như là trường hợp của thư viện.

Cảm ơn bạn rất nhiều.

Trả lời

3

Tôi đã thử cả lệnh openssl và thư viện JS mà bạn đã đề cập ở trên và kết quả nhất quán. Chữ ký mà tôi nhận được từ cả hai cách đều giống nhau.

Một điều tôi nhận thấy từ bài đăng của bạn là, kết quả được mã hóa base64 được tạo từ thư viện quá dài và có vẻ sai. Có thể bạn không mã hóa base64 chữ ký nhị phân không?

Bạn có thể thử mã này để nhận chuỗi ký tự base64 của chữ ký không?

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

Nếu bạn so sánh giá trị của "base64_encoded_signature" với những gì bạn nhận được từ lệnh openssl, chúng phải giống nhau.

+0

Xin lỗi vì trả lời muộn. Có, dường như tôi đã mã hóa chuỗi hex thay vì chuyển đổi chúng thành byte trước. Cảm ơn nhiều! – Simon

Các vấn đề liên quan