我正在编写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哈希值。
答案 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)将需要用户交互。)