是否有可用的Java AES 256位加密库?
是否有可用的Java AES 256位加密库?
Answers:
JSAES是JavaScript中AES的强大实现。 http://point-at-infinity.org/jsaes/
slowAES易于使用。合理设计。合理的OO包装。支持旋钮和控制杆,例如IV和加密模式。与.NET / C#的良好兼容性。这个名字是嘲讽的。之所以称为“ 慢速 AES”,是因为它不是在C ++中实现的。但是在我的测试中,它并不慢。
它缺少ECB模式。我猜也缺少CTR模式,尽管您可以在ECB模式下轻松构建一个CTR模式。
它仅专注于加密。,做了很好的互补类RFC2898兼容的基于口令的密钥导出,在Javascript中,是可以从Anandam。这对库可与类似的.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被认为是有害的。值得一读。
谷歌搜索“ JavaScript AES”发现了几个示例。弹出的第一个窗口旨在解释算法并提供解决方案:
这篇文章现在很老了,但是crypto-js可能现在是最完整的javascript加密库。
加密JS是用JavaScript实现的密码算法的集合。它包括以下密码:AES-128,AES-192,AES-256,DES,三重DES,Rabbit,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之间执行一些加密/解密互操作性。
特别...
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 app引擎托管的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)
编辑:该网页加密API现在大多数浏览器中实现,如果你关心性能应作为首要的解决方案。请注意,IE11实施了该标准的较早版本,没有使用Promise。
一些示例可以在这里找到:
使用CryptoJS
这是代码:https : //github.com/odedhb/AES-encrypt
这是一个在线工作示例:https : //odedhb.github.io/AES-encrypt/
尝试asmcrypto.js-确实非常快。
PS:我是作者,可以回答您的问题。我也很高兴得到一些反馈:)
如果您尝试使用javascript以避免使用SSL,请再三考虑。有很多中途措施,但是只有 SSL提供安全的通信。Javascript加密库可以帮助抵御某些攻击,但不能抵御真正的中间人攻击。
如果您要在自定义域中为Google App Engine寻找SSL,请访问wwwizer.com。
以下文章介绍了如何使用javascript创建尝试安全通信以及如何将其弄错: 使用JavaScript加密模块而不是SSL / HTTPS
斯坦福大学的免费库也可以替代Cryptojs
带有AES-256支持的另一种解决方案:https : //github.com/digitalbazaar/forge