1

我正在编写一个 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 哈希。

4

2 回答 2

0

jsrsasign库,其RSAKey类具有验证 RSA 加密内容的方法。您可能必须使用相关的 HTML5 API读取文件(如果没有用户交互,我不知道有什么办法)。

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

如果必须与扩展一起安装单独的应用程序是可以的,您可以查看Native Messaging。基本上,您有一个小型原生应用程序,它执行适当的 openssl 命令,您可以通过 Chrome 扩展程序与它“交谈”。(但同样,确定下载文件的位置和名称,将(afaik)需要用户交互。)

于 2013-11-07T07:29:10.600 回答
0

https 不是文件下载的选项

你能详细说明一下吗?我想不出 http 是可用选项而 https 不是(无法获得证书)的场景。

考虑到这一点,我可以同意您至少不要尝试自己进行滚动加密。CryptoJS实现了一些流行的加密算法。如果您寻求 OpenSSL 互操作性,这就是您的代码在使用 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 发现了一个关于使用JSBN进行公钥/私钥对加密的问题。如果 https 真的不是一个选项,也许这值得研究?

于 2013-11-07T06:22:04.697 回答