Javascript AES 加密

IT技术 javascript encryption aes
2021-01-23 05:08:44

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

6个回答

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

JSAES是一个很好的起点,但它只能用于加密 16 字节的数据。如果您想加密更大的数据块,您必须自己扩展它以实现初始化向量、加密模式(CBC 或其他...)、填充。
2021-03-20 05:08:44
JSAES 在 GNU GPL 下获得许可 - 因此它不适用于某些项目。
2021-03-23 05:08:44
@HappyDeveloper 好吧,不。不要为此责怪许可证。作者选择了错误的许可证,因为 GPL 不适用于图书馆。
2021-03-23 05:08:44
它是“免费使用”,但如果您想在 GPL 以外的其他内容下发布您的结果产品,则不能使用它。
2021-03-31 05:08:44
这现在非常有用且功能丰富code.google.com/p/crypto-js
2021-04-06 05:08:44

是使用slowAES的演示页面

slowAES很容易使用。逻辑设计。合理的OO包装。支持旋钮和控制杆,如 IV 和加密模式。与 .NET/C# 的良好兼容性。这个名字是半开玩笑的;它被称为“AES”,因为它不是在 C++ 中实现的。但在我的测试中,它并不是不切实际的慢。

它缺乏欧洲央行模式。也缺乏 CTR 模式,虽然你可以很容易地建立一个 ECB 模式,我猜。

它只专注于加密。,做了很好的互补类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 被认为是有害的。值得一读。

我看到一个有效的用例 - HTML 5 应用程序,其中所有文件都存储在本地。如果本地文件可以被劫持,那么无论如何你都注定失败;-)。
2021-03-13 05:08:44
随机键问题可以通过让用户移动鼠标并输入键作为真正的随机生成器来解决。
2021-03-31 05:08:44
演示页面的链接似乎已损坏。
2021-04-05 05:08:44
关于edit3链接,是一篇废话……一半的说法完全是假的!
2021-04-11 05:08:44

在我搜索 AES 加密时,我从一些斯坦福学生那里发现了这个。声称在那里最快。支持 CCM、OCB、GCM 和块加密。 http://crypto.stanford.edu/sjcl/

这不是异步的,所以如果你正在加密或解密一些更长的字符串,例如使用 AES-CBC,那么它会阻止 UI
2021-03-12 05:08:44
这就是我要说的!
2021-03-23 05:08:44
缺乏文档,而且很难使用。你如何改变密钥长度?我四处寻找文档,但无法在合理的时间内弄清楚。此外,当您加密某些内容时,您会返回一组键值对,但文档似乎没有解释这些。我最终使用了可移动类型库。
2021-04-03 05:08:44

谷歌搜索“JavaScript AES”找到了几个例子。弹出的第一个旨在解释算法并提供解决方案:

可移动类型脚本:AES

我不知道如何在那个库中设置 IV。它也不是很面向对象。
2021-03-15 05:08:44
计数器模式中 IV 的等价物是随机数。此实现已被重新表述为更加面向对象。它仅包括计数器 (CTR) 操作模式。
2021-03-23 05:08:44
这很有效,只是它没有任何 ECB 模式。
2021-03-30 05:08:44
谷歌搜索也将这个问题显示为第二个结果。
2021-03-30 05:08:44
你必须原谅我;这个答案已经有 12 年历史了,而且我写的时候 Stack Overflow 并没有经常出现在 Google 上。:-)
2021-04-06 05:08:44

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

CryptoJS是用 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-aescrypto-js的 node.js 端口

@CpnCrunch :完整的 API 文档不在线,但代码作为完整的 javadoc api 注释。你可以生成它。阅读cipher-core.js 源代码的评论,你会发现密码的密钥大小和密码的 IV 大小。
2021-03-19 05:08:44
奇怪,当我加密和解密回来时,文本是不同的
2021-03-24 05:08:44
不幸的是缺少文档。它似乎只有一个“快速入门”指南。完整的文档在哪里?它说它支持多个密钥长度,但没有关于如何做到这一点的文档。
2021-03-25 05:08:44
因为使用openssl存在一些冲突
2021-04-07 05:08:44