Javascript 中是否有可用于 AES 256 位加密的库?
14 回答
JSAES 是 JavaScript 中强大的 AES 实现。 http://point-at-infinity.org/jsaes/
这是一个使用 slowAES的演示页面。
slowAES很容易使用。逻辑设计。合理的OO包装。支持 IV 和加密模式等旋钮和控制杆。与 .NET/C# 的良好兼容性。这个名字是诙谐的;它被称为“慢速AES”,因为它不是用 C++ 实现的。但在我的测试中,它并不是非常慢。
它缺乏欧洲央行模式。也缺少 CTR 模式,尽管我猜你可以很容易地在 ECB 模式下构建一个。
它只专注于加密。Anandam提供了一个很好的补充类,它使用Javascript 执行RFC2898兼容的基于密码的密钥派生。这对库适用于类似的 .NET 类。良好的互操作性。不过,与 SlowAES 相比,Javascript PBKDF2 在生成密钥时明显慢于Rfc2898DeriveBytes类。
从技术上讲,互操作性很好,这并不奇怪,但对我来说,关键是 SlowAES 采用的模型熟悉且易于使用。我发现其他一些用于 AES 的 Javascript 库很难理解和使用。例如,在其中一些中,我找不到设置 IV 或模式(CBC、ECB 等)的位置。事情不是我期望的那样。SlowAES 不是这样的。这些房产正好在我预期的地方。熟悉 Java 和 .NET 加密编程模型后,我很容易上手。
Anandam 的 PBKDF2 还没有达到那个水平。它仅支持对 DeriveBytes 函数的一次调用,因此如果您需要从密码中派生密钥和 IV,则此库将无法正常工作,不变。稍作修改,它就可以正常工作。
编辑:我将一个将SlowAES和 Anandam 的PBKDF2的修改版本打包到 Windows 脚本组件中的示例放在一起。将此 AES 与密码派生密钥一起使用显示了与 .NET RijndaelManaged 类的良好互操作性。
EDIT2:演示页面显示了如何从网页使用此 AES 加密。使用 .NET 中支持的相同输入(iv、键、模式等)为您提供与 .NET Rijndael 类的良好互操作性。您可以执行“查看源代码”来获取该页面的 javascript。
EDIT3
后期添加:Javascript Cryptography 被认为是有害的。值得一读。
在我搜索 AES 加密时,我从一些斯坦福大学的学生那里发现了这一点。声称是最快的。支持 CCM、OCB、GCM 和块加密。 http://crypto.stanford.edu/sjcl/
谷歌搜索“JavaScript AES”发现了几个例子。弹出的第一个旨在解释算法并提供解决方案:
最近我需要在 javascript 和 python 之间执行一些加密/解密互操作性。
具体来说...
1) 使用 AES 在 javascript 中加密和在 python (Google App Engine) 中解密 2) 使用 RSA 在 javascript 中加密和在 python (Google App Engine) 中解密 3) 使用 pycrypto
我发现网上有很多不同版本的 RSA 和 AES,它们的方法各不相同,但我没有找到端到端 javascript 和 python 互操作性的好例子。
经过大量的反复试验,最终我设法拼凑出适合我需要的东西。
无论如何,我敲了一个 js/webapp 与使用 AES 和公钥和私钥 RSA 东西的谷歌应用引擎托管的 python 服务器交谈的例子。
我虽然我会通过链接将它包含在此处,以防它对需要完成相同事情的其他人有所帮助。
http://www.ipowow.com/files/aesrsademo.tar.gz
并在 rsa-aes-demo DOT appspot DOT com 上查看演示
编辑:查看浏览器控制台输出并查看源代码以获取有关演示中正在发生的事情的一些提示和有用消息
编辑:更新了非常旧且失效的源链接到现在指向
从我自己的经验来看,asmcrypto.js在 JavaScript 中提供了最快的 AES 实现(尤其是在 Firefox 中,因为它可以在那里充分利用 asm.js)。
从自述文件:
Chrome/31.0 SHA256: 51 MiB/s (9 times faster than SJCL and CryptoJS) AES-CBC: 47 MiB/s (13 times faster than CryptoJS and 20 times faster than SJCL) Firefox/26.0 SHA256: 144 MiB/s (5 times faster than CryptoJS and 20 times faster than SJCL) AES-CBC: 81 MiB/s (3 times faster than CryptoJS and 8 times faster than SJCL)
编辑: Web Cryptography API现在已在大多数浏览器中实现,如果您关心性能,则应将其用作主要解决方案。请注意,IE11 实现了不使用承诺的标准的早期草案版本。
可以在此处找到一些示例:
使用 CryptoJS
这是代码: https ://github.com/odedhb/AES-encrypt
这是一个在线工作示例: https ://odedhb.github.io/AES-encrypt/
试试asmcrypto.js——它真的很快。
PS:我是作者,如果有问题我可以回答你。我也很高兴得到一些反馈:)
如果您尝试使用 javascript 来避免使用 SSL,请三思。有许多中途措施,但只有SSL 提供安全通信。Javascript 加密库可以帮助抵御特定的攻击,但不是真正的中间人攻击。
以下文章解释了如何尝试使用 javascript 创建安全通信,以及如何出错: 使用 JavaScript 加密模块而不是 SSL/HTTPS
注意:如果您正在为自定义域上的谷歌应用引擎寻找 SSL,请查看wwwizer.com。
还有一个斯坦福免费库作为 Cryptojs 的替代品
另一个支持 AES-256 的解决方案:https ://github.com/digitalbazaar/forge