在Javascript中验证RSA签名文件

时间:2013-11-07 06:13:01

标签: javascript google-chrome-extension rsa

我正在编写Chrome扩展程序,我需要验证一个文件,我将通过http下载以确保它没有被篡改。我不介意邮件被拦截和解密,我只需要我的扩展程序,以确保邮件来自我。 https不是文件下载的选项,但我认为这也是一样好。扩展名附带公钥。

在javascript中,我想验证使用下面的openssl命令创建的文件。

openssl rsautl -sign -inkey mykey.pem -out secret.txt.rsa -in secret.txt

基本上我希望javascript做与

相同的事情
openssl rsautl -verify -inkey pubkey.pem -in secret.txt.rsa -pubin

如果那不可能有什么好的选择吗?

更新: jsrsasign图书馆工作得很好。我最终验证了一个同样好的sha512哈希值。

2 个答案:

答案 0 :(得分:0)

  

https不是文件下载的选项

你能详细说明吗?我想不出一个场景,http是一个可用的选项而https不是(没有能够获得证书)。

考虑到这一点,我可以批准你至少不要尝试自己动手加密。 CryptoJS实现了一些流行的加密算法。如果您寻求OpenSSL互操作性,那么这就是您的代码在decrypting with CryptoJS

时的样子
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
    var decrypted = CryptoJS.AES.decrypt(openSSLEncrypted, "Secret Passphrase");
</script>

更新:搜索stackoverflow显示a question关于使用JSBN进行公钥/私钥密钥加密。如果https确实不是一个选项,那么可能需要考虑一下?

答案 1 :(得分:0)

jsrsasign 库,其 RSAKey 类具有验证RSA加密内容的方法。您可能需要 read the file 使用相关的HTML5 API(如果没有用户互动,我不知道如何做。)

这远不是一个直接的解决方案(我认为你不会找到一个使用JS)并且可能不值得这么麻烦,但是如果你非常需要这个功能,试一试。

如果可以安装单独的应用以及扩展程序,则可以查看 Native Messaging 。基本上,您有一个小型本机应用程序,可执行相应的openssl命令,您可以通过Chrome扩展程序与其“对话”。 (但同样,确定下载文件的位置和名称(afaik)将需要用户交互。)