【发布时间】:2010-10-22 02:00:49
【问题描述】:
是否有可用于 Javascript 中的 AES 256 位加密的库?
【问题讨论】:
-
这是使用 crypto-js 进行 AES 加密所需的内容
-
还有斯坦福 Javascript Crypto Library (SJCL):crypto.stanford.edu/sjcl
标签: javascript encryption aes
是否有可用于 Javascript 中的 AES 256 位加密的库?
【问题讨论】:
标签: javascript encryption aes
JSAES 是 JavaScript 中强大的 AES 实现。 http://point-at-infinity.org/jsaes/
【讨论】:
这里是a demonstration page,它使用了slowAES。
slowAES 易于使用。逻辑设计。合理的OO包装。支持 IV 和加密模式等旋钮和控制杆。与 .NET/C# 的良好兼容性。这个名字是诙谐的;它被称为“slow AES”,因为它不是在 C++ 中实现的。但在我的测试中,它并不是非常慢。
它缺少欧洲央行模式。也缺少 CTR 模式,尽管我猜你可以很容易地在 ECB 模式下构建一个。
它只专注于加密。 available from Anandam 是一个很好的补充类,它在 Javascript 中执行 RFC2898 兼容的基于密码的密钥派生。这对库适用于类似的 .NET 类。良好的互操作性。不过,与 SlowAES 相比,Javascript PBKDF2 在生成密钥时明显慢于Rfc2898DeriveBytes 类。
从技术上讲,互操作性很好,这并不奇怪,但对我来说,关键是 SlowAES 采用的模型熟悉且易于使用。我发现其他一些用于 AES 的 Javascript 库很难理解和使用。例如,在其中一些中,我找不到设置 IV 或模式(CBC、ECB 等)的位置。事情不是我期望的那样。 SlowAES 不是这样的。这些房产正好在我预期的地方。熟悉 Java 和 .NET 加密编程模型对我来说很容易上手。
Anandam 的 PBKDF2 还没有达到那个水平。它仅支持对 DeriveBytes 函数的一次调用,因此如果您需要从密码中同时派生密钥和 IV,则此库将无法正常工作。稍作修改,就可以正常工作。
编辑:我将包装 SlowAES 的 an example 和 Anandam 的 PBKDF2 的修改版本放在 Windows 脚本组件中。将此 AES 与密码派生密钥一起使用显示与 .NET RijndaelManaged 类的良好互操作性。
EDIT2:the demo page 展示了如何在网页中使用这种 AES 加密。使用 .NET 中支持的相同输入(iv、键、模式等)可以为您提供与 .NET Rijndael 类的良好互操作性。您可以执行“查看源代码”来获取该页面的 javascript。
EDIT3
后期添加:Javascript Cryptography considered harmful. 值得一读。
【讨论】:
在我搜索 AES 加密时,我从一些斯坦福大学的学生那里找到了这个。声称是最快的。支持 CCM、OCB、GCM 和块加密。 http://crypto.stanford.edu/sjcl/
【讨论】:
Googling "JavaScript AES" 找到了几个例子。弹出的第一个旨在解释算法并提供解决方案:
【讨论】:
这个帖子现在老了,不过crypto-js,可能是现在最完整的javascript加密库了。
CryptoJS 是一组用 JavaScript 实现的加密算法。 它包括以下密码:AES-128、AES-192、AES-256、DES、Triple DES、Rabbit、RC4、RC4Drop 和散列器:MD5、RIPEMD-160、SHA-1、SHA-256、SHA-512、SHA -3 具有 224、256、384 或 512 位。
您可能想查看他们的Quick-start Guide,这也是以下 node.js 端口的参考。
node-cryptojs-aes 是 crypto-js 的 node.js 端口
【讨论】:
最近我需要在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 的 google 应用引擎托管的 python 服务器对话的示例。
虽然我会通过链接将其包含在此处,以防它对需要完成相同任务的其他人有所帮助。
http://www.ipowow.com/files/aesrsademo.tar.gz
并在 rsa-aes-demo DOT appspot DOT com 上查看 demo
编辑:查看浏览器控制台输出并查看源代码以获取有关演示
中正在发生的事情的一些提示和有用消息编辑:将非常旧且失效的源链接更新为现在指向
【讨论】:
从我自己的经验来看,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 现在是implemented in most browsers,如果您关心性能,应该将其用作主要解决方案。请注意,IE11 实现了该标准的早期草案版本,它没有使用 Promise。
一些例子可以在这里找到:
【讨论】:
使用 CryptoJS
代码如下: https://github.com/odedhb/AES-encrypt
这是一个在线工作示例: https://odedhb.github.io/AES-encrypt/
【讨论】:
试试asmcrypto.js——真的很快。
PS:我是作者,如果有问题,我可以回答您。 我也很高兴得到一些反馈:)
【讨论】:
还有一个斯坦福免费库作为 Cryptojs 的替代品
【讨论】:
如果您尝试使用 javascript 来避免使用 SSL,请三思。有许多中途措施,但只有 SSL 提供安全通信。 Javascript 加密库可以帮助抵御某些攻击,但不是真正的中间人攻击。
以下文章解释了如何尝试使用 javascript 创建安全通信,以及如何出错: Use JavaScript encryption module instead of SSL/HTTPS
注意:如果您正在为自定义域上的谷歌应用引擎寻找 SSL,请查看wwwizer.com。
【讨论】:
【讨论】:
另一种支持 AES-256 的解决方案:https://github.com/digitalbazaar/forge
【讨论】:
【讨论】: