问题标签 [block-cipher]

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 投票
1 回答
381 浏览

cryptography - libgcrypt 如何为 CTR 模式增加计数器?

我有一个使用 libgcrypt 的 CTR 模式实现使用 AES-256 加密的文件。我希望能够部分解密文件(例如,在不解密整个文件的情况下解密 20 个块中的第 5-10 个块)。

我知道通过使用 CTR 模式,我应该可以做到。我只需要知道正确的计数器。问题在于我所拥有的只是块 0 的初始计数器。例如,如果我想解密块 5,我需要另一个计数器,它是通过对从 0 开始的每个块的初始计数器执行一些操作来实现的到 5。

我似乎找不到 libgcrypt 公开的 API,以便在给定初始计数器的情况下计算后续块的计数器。

给定块#0的计数器,我如何计算后面块(例如块#5)的计数器?

0 投票
1 回答
136 浏览

java - 是否可以在不提供整个转换的情况下检查特定的密码块模式支持?

我有一个单元测试在 Java 8+ 中通过并在 Java 7 上失败,因为 Java 7 和更早版本似乎不支持 GCM 模式。

我知道我可以尝试使用例如AES/GCM/PKCS5Padding和 catch的转换来创建密码NoSuchAlgorithmException,但是该异常可能仅针对该特定转换而引发,而不仅仅是因为不支持 GCM 模式本身(在任何转换中)。

我也可以只检查 JVM 版本,但这对于正在使用 3rd 方加密库(例如 BouncyCastle)的环境或具有来自另一个供应商的内置支持的 JVM 的环境来说不是有效的检查包括对 GCM 的支持。

我宁愿在不支持 GCM 的情况下跳过测试,而不仅仅是在不支持我在代码中选择的特定(和完整)转换的情况下。

是否可以从 Java 中检测支持的密码块模式?还是只能尝试特定的转换并查看它是否有效?

0 投票
3 回答
1255 浏览

java - 正在寻找用于解密使用 openssl -aes-256-cbc -a -salt 命令加密的消息的 Java 实现?

我正在寻找任何示例 java 代码,如果密钥已知,它将解密使用“openssl enc -aes-256-cbc) -a -salt”命令加密的消息。

https://pastebin.com/YiwbCAW8

到目前为止,我能够获得以下加密和解密消息的 java 代码。但我无法使用 openssl 命令解密加密消息。收到“坏幻数”错误。任何想法 ?

Encrypt("示例文本", "test$password") = "i+5zkPPgnDdV7fr/w8uHkw=="

解密("i+5zkPPgnDdV7fr/w8uHkw==", "test$password") = "示例文本"

F:\cipher>echo i+5zkPPgnDdV7fr/w8uHkw== | openssl aes-256-cbc -a -salt -d

输入aes-256-cbc解密密码:

坏幻数

0 投票
1 回答
171 浏览

java - Rijndael 实现中的 OutputLengthException

我在使用 BouncyCastle API for Java 实现 Rijndael 加密时遇到问题。

OutputLengthException当我执行时,我得到了cipher.doFinal(inputTextBytes, intOutOff);

org.bouncycastle.crypto.OutputLengthException:输出缓冲区太短

我不完全理解如何生成该整数来执行该doFinal()方法。

这是我尝试过的:

你能帮助我理解我做错了什么吗?

0 投票
1 回答
360 浏览

cryptography - 双鱼已知答案测试

我正在研究使用 twofish 来加密数据字符串。在将我的宝贵数据委托给未知图书馆之前,我希望验证它是否与Bruce Schneier 网站上发布的已知答案测试一致。

令我沮丧的是,我尝试了三个 twofish 实现,但没有一个与 KAT 一致。这让我相信我做错了什么,我想知道是否有人可以告诉我它是什么。

我确保模式相同(CBC),密钥长度相同(128 位)并且 iv/key/pt 值相同。twofish 加密是否有其他参数在起作用?

以下是来自 KAT 存档的 CBC_E_M.txt 的前两个测试条目:

我将这些解释为十六进制,因此 16bytes=128bits 长。

我尝试使用以下 twofish 实现:

所有三个在第一次测试中给出相同的 CT,即(十六进制编码)

到目前为止一切顺利,除了它与 KAT 中的 CT0 不一致......

对于第二个测试,ruby 库和在线工具给出:

虽然 js 库提供:

这些都不与 KAT 中的 CT1 一致。

我在这里做错了吗?非常感谢任何帮助。

在线工具易于使用,只需确保选择 HEX 作为键并输入文本。这是我用来生成这些值的 ruby​​ 代码(必须检查每个库才能使其工作):

0 投票
1 回答
358 浏览

encryption - 4 位 OFB TEA 加密是什么意思?

我遇到了以下任务:

实现 4 位 OFB TEA 算法

我不完全理解。

据我了解 TEA 算法,它一次加密/解密 64 位。它有一个变体,称为“Block TEA”,它允许多个块或字,但仍使用 64 位块大小(我可能错了)。所以我对 nOFB 如何与 TEA 一起加密任何文本数据感到困惑。

我一直在关注 wikipedia 提供的 TEA 的实现,链接 - TEA Encryption。还有这个 - TEA Variants pdf。我仍然不知道如何将 OFB 或 nOFB 和 TEA 结合起来。

我所需要的只是一些指南或文本或参考资料或想法,可以详细解释上述任务。我可以自己实现。

0 投票
1 回答
856 浏览

matlab - 如何对 64 次幂进行模 2 加法

我想在 MATLAB 之间p1p2使用 MATLAB 之间对 64 次幂执行加法模 2。p1和都是p2类型uint64。下面的代码正确吗?

0 投票
2 回答
781 浏览

encryption - AES 128 CTR 纯文本大小不是块大小的倍数

读到AES 128 CTR 模式应该适用于 16 字节(128 位)的块,如 CBC 模式。

实际上,如果我尝试使用 openssl 对 18 字节纯文本进行编码:

密文是 16 或 32 字节,取决于-nopad参数的存在。

但如果我尝试点击率:

在每种情况下,密文都是 18 个字节,就像明文一样。

我不知道为什么

0 投票
1 回答
77 浏览

matlab - 如何修复双精度数据类型和 uint64 之间的精度差异

我正在使用 MATLAB 实现三鱼分组密码。起初,我在 uint8 数字上实现了算法来验证我的代码。一切正常,解密成功。但是当我将数字替换为 uint64 时,纯文本没有正确检索。
我一遍又一遍地追踪查房结果寻找原因,但至今找不到。加密和解密的前四位是有区别的,即沿x轮加密为9824265115183455531,但解密为9824265115183455488。

我认为这种差异背后的原因在于函数 AddMod64 和 SubMod64 找到算术模 2 的 64 次幂。但到目前为止我真的无法修复它。

我知道

0 投票
1 回答
219 浏览

java - php 中的 AES/CBC/PKCS5Padding java 等价物是什么?

我正在尝试将以下 java 代码段移植到 php,但不知何故,从 php 生成的输出与 java 的输出几乎不匹配。我究竟做错了什么?

Java 片段:

Java校验和输入/输出(虚拟数据):

等效的 PHP 代码段:

PHP校验和输出: