问题标签 [cryptojs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
160 浏览

javascript - 使用相同的对称密钥加密小字符串的嵌套映射

假设我正在创建一个 web 应用程序,用户可以在其中创建一个嵌套的字符串树(包含敏感信息)。这些字符串可能很短。我想在保存之前加密这棵树中的键和值。树中的所有值都将使用用户提供的对称密钥在客户端进行加密。同样,它们将在读取时在客户端被解密。

树保存在 Mongo 数据库中。

考虑到树中的所有数据都将使用相同的密钥加密,我无法决定是否应该序列化树并加密它具有整个字符串或是否单独加密值。

两者的优缺点是什么?

据我所知,AES 使用 128 位的块大小,这意味着任何字符串在编码时都可以增长到 15 个字符的长度,这有利于对序列化字符串进行编码(如果你想避免开销)

注意:虽然 webapp 将同时使用 HTTPS、IP 白名单和多因素身份验证,但我想努力防止 Mongo 数据库被盗时数据泄露。这就是我要去的地方。对如何实现这一点的建议或想法表示赞赏。

更新

此外,我还希望我的服务能够激发信任。以明文形式发送数据(尽管通过 HTTPS)意味着用户必须信任我在持久化之前对其进行加密。加密客户端使我能够强调我不知道(或需要知道)我正在保存什么。

0 投票
1 回答
1856 浏览

cryptojs - 使用crypto-js解密在C#中加密的AES

我在 C# 中使用 AES 加密字符串,如下所示:

我想在 javascript 中解密密文,我尝试使用 crypto-js :

我得到的解密文本是空的。我在编码、密钥大小等方面尝试了多项更改

如果需要,我可以使用另一个 javascript 库

0 投票
3 回答
1519 浏览

javascript - CryptoJS 中的 AES-CTR 是否与 PyCrypto 兼容?

我正在尝试使用 PyCrypto 库解密一些 AES-CTR-256 数据。密文由 Cryptocat 多方聊天 Javascript 代码生成,该代码依赖于 CryptoJS 库。IV 方案如 Cryptocat多方协议规范中所述:

初始化向量 (IV) 由 16 个字节组成:12 个字节是随机生成的,4 个字节用作计数器,每个块递增一次。

(12 个随机字节在 4 个计数器字节之前。)

这是我的 Python 代码:

这就是如何在 Javascript 中做同样的事情:

  1. 安装 CryptoCat 扩展
  2. 运行 CryptoCat
  3. 启动开发者控制台(Chrome/Firefox 中的 F12)
  4. 运行这些代码行

预期输出:"Hello, world!ImiAq7aVLlmZDM9RfhDQgPp0CrAyZE0lyzJ6HDq4VoUmIiKUg7i2xpTSPs28USU8". 正如预期的那样,这适用于 Javascript。

但是,Python 代码输出乱码。repr(plaintext) 给出:

我不确定为什么会这样。我很确定我的 IVCounter 实现与 JS 代码使用的方案相匹配。难道没有 Python 等效的 CryptoJS NoPadding 选项吗?我难住了。

在此先感谢您的帮助!

0 投票
1 回答
2067 浏览

javascript - CryptoJS.AES.decrypt 失败的原因?

CryptoJS.AES.decrypt函数返回一个空的 WordArray。

我的参数是secretkeyiv。key 是一个 256 位的 WordArray 并且被确认是正确的,iv 是一个 128 位的 WordArray 并且也被确认是正确的。

秘密是使用 php 加密的openssl_encrypt()- 明文是 32 个字节 - 结果是 48 个字节(所以它似乎是正确填充)。

我已经尝试将 secret 作为 WordArray、Hex 字符串和 base64 字符串,但是当我调用时:

解密的是一个空的 WordArray。这让我发疯......什么失败了?我认为这个错误在某个地方是秘密的,有填充格式或一些奇怪的东西,但是Cryptojs和 openssl_(encrypt/decrypt)之前已经证明对我来说是相互兼容的。在我失去理智之前请帮忙。

0 投票
3 回答
1785 浏览

javascript - 带有 Python 和 Javascript 的 AES CTR 模式的奇怪问题

我正在尝试解密 CryptoJS 使用 PyCrypto 创建的密文。我正在使用 AES-256-CTR,带有 12 字节随机前缀和 4 字节计数器。到目前为止,我的成功有限。请阅读我第一次尝试的上一篇文章。

这适用于Javascript:

  1. 安装 CryptoCat 扩展
  2. 运行 CryptoCat
  3. 启动开发者控制台(Chrome/Firefox 中的 F12)
  4. 运行这些代码行

预期输出:"Hello, world!ImiAq7aVLlmZDM9RfhDQgPp0CrAyZE0lyzJ6HDq4VoUmIiKUg7i2xpTSPs28USU8".


这是我用 Python 编写的一个脚本,它部分(!)解密了密文:

输出是:

'Hello, world!Imi\xfb+\xf47\x04\xa0\xb1\xa1\xea\xc0I\x03\xec\xc7\x13d\xcf\xe25>l\xdc\xbd\x9f\xa2\x98\x9f$\x13a\xbb\xcb\x13\xd2#\xc9T\xf4|\xd8\xcbaO)\x94\x9aq<\xa7\x7f\x14\x11\xb5\xb0\xb6\xb5GQ\x92'

问题是,只有输出的前16个字节与预期输出的前 16 个字节匹配!

Hello, world!ImiAq7aVLlmZDM9RfhDQgPp0CrAyZE0lyzJ6HDq4VoUmIiKUg7i2xpTSPs28USU8

当我修改脚本来执行此操作时:

这使得计数器\x00\x00\x00\x01每次被调用时输出相同的值(),明文是:

其中第 2 个 16 字节块 (dQgPp0CrAyZE0lyzJ) 与预期输出匹配。

当我将计数器设置为发出\x00\x00\x00\x02\x00\x00\x00\x03时,我得到了类似的结果——随后的 16 字节块被显示出来。唯一的例外是,对于 0,前 32 个字节被显示。

如果你连接“正确”的块,你会得到预期的明文:

这真的很奇怪。我肯定在 Python 端做错了什么,因为事情可以被解密,但不能一次全部解密。如果有人可以提供帮助,我将不胜感激。谢谢你。

0 投票
0 回答
6695 浏览

javascript - 使用cryptojs用key / iv解密base64编码的密文

我的密文在 AES-128-CBC 模式下使用 PKCS1 填充进行加密。它是 base64 编码的,就像我的密钥和 IV 一样。我正在尝试使用 CryptoJS 解密此密文,但遇到了一些困难。这是我的(非工作)代码:

所有 . 都是 base64 编码的字符串。从文档中我收集到 CryptoJS 默认使用 CBC 模式和 PKCS7 填充。

任何想法为什么它不起作用?

编辑:我的 jsfiddle:http: //jsfiddle.net/NSmxY/1/

0 投票
1 回答
1350 浏览

base64 - PHP 等效于 sha1.toString(CryptoJS.enc.Base64)

我正在将 JS 脚本转换为 PHP。该脚本使用 CryptoJS 库并使用以下行生成哈希:

我试过这个php代码

但签名不一样,它在 php.ini 中更长。

非常感谢和需要您的帮助!

约翰

0 投票
1 回答
2102 浏览

java - CryptoJS AES 和 Java AES 加密值不匹配

我正在尝试使用 AES 在客户端加密并在服务器中解密,因此使用 cryptojs 在客户端以 CBC 模式进行加密,并在服务器端使用 nopadding 也使用Cipher具有相同模式和 nopadding 的类

服务器端代码

执行

结果

任何人都可以指出错误吗?

0 投票
1 回答
38802 浏览

javascript - CryptoJS 中的 AES 加密和 Coldfusion 中的解密

我们有一个用 Coldfusion9 编写的静默登录服务,它接受来自外部系统的加密字符串,然后根据商定的算法/编码设置解密。多年来,这在运行 ASP/JAVA/PHP 的系统上一直没有问题,但是我们现在有一个客户别无选择,只能使用 CryptoJS 来执行加密,而在我的一生中,我无法弄清楚为什么这不会在 Coldfusion 中解密。

我的加密知识并不出色,但我注意到的是,每次我执行加密时,完全相同的字符串/密钥的 CryptoJS 加密密文都会有所不同,而在 Coldfusion/Java 中,我总是可以期待完全相同的加密字符串。我不确定这是否与编码相关,但我之前从未遇到过从任何其他系统接受加密字符串的问题,所以我希望这是我在 CryptoJS 中加密的方式不正确。

0 投票
2 回答
3211 浏览

javascript - 如何使用 JSBN 加密 Crypto-JS 密钥?

我正在使用JSBN使用公钥/私钥对加密/解密数据。它适用于文本数据,包括十六进制字符串。

我的问题是现在我有二进制数据,特别是Crypto-JS字数组,我需要用公钥加密并发送到另一个平台。

所以考虑一下:

这可行,但这意味着“encrypted_key”实际上是一个已加密的十六进制字符串,而不是实际的密钥。我需要加密实际的密钥。

所以我在这里看到了两个挑战:

1) 我不是 100% 确定如何从 CryptoJS.lib.WordArray 中获取实际字节——尽管这似乎并非完全不可克服。

2)我不知道是否可以使用 JSBN 加密二进制数据。我很想知道如何做到这一点。

有什么想法吗?