Javascript AES 加密

在 Javascript 中是否有可用于 AES 256位加密的库?

225365 次浏览

在谷歌上搜索“ JavaScript AES” 可以找到几个例子。第一个跳出来的是用来解释算法的,同时也提供了一个解决方案:

活字脚本: AES

JSAES 是 JavaScript 中 AES 的一个强大实现。 Http://point-at-infinity.org/jsaes/

这是使用 Slow AES 的 示范页

Slow AES 易于使用。合乎逻辑的设计。合理的 OO 包装。支持类似 IV 和加密模式的旋钮和杠杆。良好的相容性。NET/C # .这个名字是开玩笑的; 它被称为“ 慢慢来 AES”,因为它不是在 C + + 中实现的。但在我的测试中,这并不是不切实际的缓慢。

它缺乏欧洲央行的模式。也缺少一个点击率模式,虽然你可以建立一个相当容易给欧洲央行模式,我猜。

它只专注于加密。在 Javascript 中,可从 Anandam 订购是一个很好的补充类,可以进行符合 RFC2898的基于密码的密钥派生。这对库与类似的。NET 类。合作愉快。尽管与 SlowAES 相比,Javascript PBKDF2在生成键时明显慢于 Rfc2898DeriveBytes类。

It's not surprising that technically there is good interop, but the key point for me was the model adopted by SlowAES is familiar and easy to use. I found some of the other Javascript libraries for AES to be hard to understand and use. For example, in some of them I couldn't find the place to set the IV, or the mode (CBC, ECB, etc). Things were not where I expected them to be. SlowAES was not like that. The properties were right where I expected them to be. It was easy for me to pick up, having been familiar with the Java and .NET crypto programming models.

Anandam's PBKDF2 was not quite on that level. It supported only a single call to DeriveBytes function, so if you need to derive both a key and an IV from a password, this library won't work, unchanged. Some slight modification, and it is working just fine for that purpose.

EDIT: I put together 一个例子 of packaging SlowAES and a modified version of Anandam's PBKDF2 into Windows Script Components. Using this AES with a password-derived key shows good interop with the .NET RijndaelManaged class.

EDIT2 : 演示页面展示了如何在网页上使用这种 AES 加密。中支持的相同输入(iv、键、模式等)。NET 为您提供了良好的互操作。NET Rijndael 类。您可以执行“查看源代码”来获取该页面的 javascript。

EDIT3
值得一读。

在我的搜索 AES 加密,我发现这从一些斯坦福大学的学生。自称是最快的。支持 CCM,OCB,GCM 和块加密。 Http://crypto.stanford.edu/sjcl/

最近我需要在 javascript 和 python 之间执行一些加密/解密互操作性。

Specifically...

1)使用 AES 在 javascript 中进行加密,在 python 中进行解密(Google App Engine) 2)使用 RSA 在 javascript 中进行加密,在 python 中进行解密(Google App Engine) 3)使用密码

I found lots and lots of different versions of RSA and AES floating around the web and 它们的方法各不相同,但我没有找到端到端 javascript 和 python 互操作性的好例子。

经过反复试验,最终我设法拼凑出了一些适合我需要的东西。

不管怎么说,我举了一个例子,一个 js/webapp 与一个使用 AES、公钥和私钥 RSA 的 google app 引擎托管的 python 服务器交谈。

我想我会包括它在这里的链接,以防它将有一些用于其他人谁需要完成同样的事情。

Http://www.ipowow.com/files/aesrsademo.tar.gz

查看 小样在 rsa-aes-demo DOT appspot DOT com

编辑: 查看浏览器控制台输出并查看源代码,以获得有关 小样中正在发生的事情的一些提示和有用的消息

编辑: 更新非常旧和不存在的链接到源代码,现在指向

Https://sestertii.com/files/aesrsademo.tar.gz

如果您试图使用 javascript 来避免使用 SSL,请三思。有许多折衷措施,但 只有 SSL 提供安全通信。Javascript 加密库可以帮助抵御一系列攻击,但不能真正抵御中间人攻击。

下面的文章解释了如何尝试创建与 javascript 的安全通信,以及如何出错: Use JavaScript encryption module instead of SSL/HTTPS

注意 : 如果您正在自定义域上寻找谷歌应用程序引擎的 SSL,请参考 Www.wizer.com

这篇文章现在已经很老了,但是 crypto-js,可能是现在最完整的 javascript 加密库了。

CryptoJS is a collection of cryptographic algorithms implemented in JavaScript. 它包括以下密码: AES-128,AES-192,AES-256,DES,三重 DES,Rabbit,RC4,RC4Drop 和 hashers: MD5,RIPEMD-160,SHA-1,SHA-256,SHA-512,SHA-3具有224,256,384或512位。

您可能需要查看它们的 快速启动指南,它也是以下 node.js 端口的引用。

Node-crypjs-aes 是 crypto-js 的 node.js 端口

还有一个斯坦福大学自由解放组织作为 Cryptojs 的替代品

Http://crypto.stanford.edu/sjcl/

另一种支持 W/AES-256的解决方案: https://github.com/digitalbazaar/forge

这是唯一适合我的解决方案:

Http://www.hanewin.net/encrypt/aes/aes.htm

这是非常基本的,但很容易使用,似乎工作得很好。

从我自己的经验来看,Asmcryp.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)

编辑: 网络加密 API现在是 在大多数浏览器中实现,如果您关心性能,应该将其用作主要解决方案。请注意,IE11实现了标准的早期草案版本,没有使用承诺。

以下是一些例子:

试试 Asmcryp.jsー它真的很快。

PS: I'm an author and I can answer your questions if any. 我也很乐意得到一些反馈:)

使用 CryptoJS

密码是这样的: Https://github.com/odedhb/aes-encrypt

这里有一个在线工作的例子: Https://odedhb.github.io/aes-encrypt/