Javascript的AESencryption

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

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

这是一个使用slowAES 的演示页面 。

slowAES很容易使用。 逻辑devise。 合理的OO包装。 支持像IV和encryption模式的旋钮和杠杆。 与.NET / C#良好的兼容性。 这个名字是口齿不清的; 它被称为“ AES”,因为它没有在C ++中实现。 但在我的testing中,这并不是不切实际的慢。

它缺乏ECB模式。 也缺乏CTR模式,虽然你可以build立一个相当容易给ECB模式,我想。

它完全专注于encryption。 Anandam提供了一个很好的补充类,可以在Javascript中使用基于RFC2898的基于密码的密钥派生。 这对库很适合类似的.NET类。 良好的互操作性。 尽pipe与SlowAES相比,生成密钥时,Javascript PBKDF2明显比Rfc2898DeriveBytes类慢。

从技术上来说,互操作性不错,但我的关键是SlowAES采用的模型是熟悉且易于使用的。 我发现一些AES的其他Javascript库很难理解和使用。 例如,其中一些我找不到设置IV的地方,或者模式(CBC,ECB等)。 事情并不是我预期的那样。 SlowAES不是那样的。 这些物业是我所期待的。 对于我来说,熟悉Java和.NETencryption编程模型很容易。

Anandam的PBKDF2还没有达到那个水平。 它只支持对DeriveBytes函数的一个调用,所以如果你需要从密码中派生一个密钥和一个IV,这个库将不会工作,保持不变。 稍作修改,为此目的而工作得很好。

编辑 :我把一个包装SlowAES和Anandam的PBKDF2修改版本的例子放到Windows脚本组件。 使用AES和密码派生键显示与.NET RijndaelManaged类的良好互操作性。

EDIT2 : 演示页面显示如何使用此网页的AESencryption。 使用.NET中支持的相同input(iv,key,mode等)可以很好地与.NET Rijndael类互操作。 你可以做一个“查看源代码”来获取该页面的JavaScript。

EDIT3
后来join: JavaScriptencryption被认为是有害的。 值得一读。

在我的AESencryptionsearch中,我发现了一些斯坦福大学的学生。 声称是最快的那里。 支持CCM,OCB,GCM和块encryption。 http://crypto.stanford.edu/sjcl/

谷歌search“JavaScript AES”已经find了几个例子。 第一个popup的目的是解释algorithm,并提供一个解决scheme:

移动types脚本:AES

这个post现在已经老了,但是crypto-js ,可能是现在最完整的javascriptencryption库了。

CryptoJS是用JavaScript实现的一系列encryptionalgorithm。 它包括以下密码:AES-128,AES-192,AES-256,DES,三重DES,兔子,RC4,RC4Drop和哈希器:MD5,RIPEMD-160,SHA-1,SHA-256,SHA-512,SHA -3与224,256,384或512位。

你可能想看看他们的快速入门指南 ,这也是以下node.js端口的参考。

node-cryptojs-aes是crypto-js的node.js端口

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

特别…

1)使用AES在javascript中encryption并在python(Google App Engine)中解密2)使用RSA在javascript中encryption并在python(Google App Engine)中解密3)使用pycrypto

我发现很多很多不同版本的RSA和AES在networking上漂移,他们的方法都不同,但是我没有find端到端的JavaScript和Python互操作性的好例子。

最终,我在经历了许多反复试验之后,试图拼凑出符合我需要的东西。

无论如何,我敲开了一个js / webapp的例子,谈到一个谷歌应用程序引擎托pipe的Python服务器,使用AES和公钥和私钥RSA的东西。

我虽然通过链接将其包含在这里,以防其他人需要完成同样的事情。

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

并在rsa-aes-demo上看演示DOT appspot DOT com

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

编辑:更新非常古老和不存在的链接,以现在指向源

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

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

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

一些例子可以在这里find:

  • GitHub上的WebencryptionAPI示例
  • 用WebCrypto从密码中导出密钥

试试asmcrypto.js – 这真的很快。

PS:我是作家,如果有的话,我可以回答你的问题。 另外我会很高兴得到一些反馈:)

如果您尝试使用JavaScript来避免使用SSL,请再考虑一下。 有许多中途措施,但只有 SSL提供安全通信。 Javascriptencryption库可以帮助抵御某些攻击,但不是真正的中间人攻击。

如果您正在自定义域中查找适用于Google应用引擎的SSL,请查看wwwizer.com 。

下面的文章解释了如何创build与javascript的尝试安全通信,以及如何使它错误: 使用JavaScriptencryption模块,而不是SSL / HTTPS

还有一个斯坦福自由库作为Cryptojs的替代品

http://crypto.stanford.edu/sjcl/

另一个解决schemew / AES-256支持: https : //github.com/digitalbazaar/forge

这是我唯一的解决scheme:

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

这是非常基本的,但使用简单,似乎运作良好。

使用CryptoJS

代码如下: https : //github.com/odedhb/AES-encrypt

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