问题标签 [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.
cryptography - libgcrypt 如何为 CTR 模式增加计数器?
我有一个使用 libgcrypt 的 CTR 模式实现使用 AES-256 加密的文件。我希望能够部分解密文件(例如,在不解密整个文件的情况下解密 20 个块中的第 5-10 个块)。
我知道通过使用 CTR 模式,我应该可以做到。我只需要知道正确的计数器。问题在于我所拥有的只是块 0 的初始计数器。例如,如果我想解密块 5,我需要另一个计数器,它是通过对从 0 开始的每个块的初始计数器执行一些操作来实现的到 5。
我似乎找不到 libgcrypt 公开的 API,以便在给定初始计数器的情况下计算后续块的计数器。
给定块#0的计数器,我如何计算后面块(例如块#5)的计数器?
java - 是否可以在不提供整个转换的情况下检查特定的密码块模式支持?
我有一个单元测试在 Java 8+ 中通过并在 Java 7 上失败,因为 Java 7 和更早版本似乎不支持 GCM 模式。
我知道我可以尝试使用例如AES/GCM/PKCS5Padding
和 catch的转换来创建密码NoSuchAlgorithmException
,但是该异常可能仅针对该特定转换而引发,而不仅仅是因为不支持 GCM 模式本身(在任何转换中)。
我也可以只检查 JVM 版本,但这对于正在使用 3rd 方加密库(例如 BouncyCastle)的环境或具有来自另一个供应商的内置支持的 JVM 的环境来说不是有效的检查包括对 GCM 的支持。
我宁愿只在不支持 GCM 的情况下跳过测试,而不仅仅是在不支持我在代码中选择的特定(和完整)转换的情况下。
是否可以从 Java 中检测支持的密码块模式?还是只能尝试特定的转换并查看它是否有效?
java - 正在寻找用于解密使用 openssl -aes-256-cbc -a -salt 命令加密的消息的 Java 实现?
我正在寻找任何示例 java 代码,如果密钥已知,它将解密使用“openssl enc -aes-256-cbc) -a -salt”命令加密的消息。
到目前为止,我能够获得以下加密和解密消息的 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解密密码:
坏幻数
java - Rijndael 实现中的 OutputLengthException
我在使用 BouncyCastle API for Java 实现 Rijndael 加密时遇到问题。
OutputLengthException
当我执行时,我得到了cipher.doFinal(inputTextBytes, intOutOff);
:
org.bouncycastle.crypto.OutputLengthException:输出缓冲区太短
我不完全理解如何生成该整数来执行该doFinal()
方法。
这是我尝试过的:
你能帮助我理解我做错了什么吗?
cryptography - 双鱼已知答案测试
我正在研究使用 twofish 来加密数据字符串。在将我的宝贵数据委托给未知图书馆之前,我希望验证它是否与Bruce Schneier 网站上发布的已知答案测试一致。
令我沮丧的是,我尝试了三个 twofish 实现,但没有一个与 KAT 一致。这让我相信我做错了什么,我想知道是否有人可以告诉我它是什么。
我确保模式相同(CBC),密钥长度相同(128 位)并且 iv/key/pt 值相同。twofish 加密是否有其他参数在起作用?
以下是来自 KAT 存档的 CBC_E_M.txt 的前两个测试条目:
我将这些解释为十六进制,因此 16bytes=128bits 长。
我尝试使用以下 twofish 实现:
- 红宝石:https ://github.com/mcarpenter/twofish.rb
- JS:https ://github.com/ryanofsky/twofish/
- 在线:http ://twofish.online-domain-tools.com/
所有三个在第一次测试中给出相同的 CT,即(十六进制编码)
到目前为止一切顺利,除了它与 KAT 中的 CT0 不一致......
对于第二个测试,ruby 库和在线工具给出:
虽然 js 库提供:
这些都不与 KAT 中的 CT1 一致。
我在这里做错了吗?非常感谢任何帮助。
在线工具易于使用,只需确保选择 HEX 作为键并输入文本。这是我用来生成这些值的 ruby 代码(必须检查每个库才能使其工作):
encryption - 4 位 OFB TEA 加密是什么意思?
我遇到了以下任务:
实现 4 位 OFB TEA 算法
我不完全理解。
据我了解 TEA 算法,它一次加密/解密 64 位。它有一个变体,称为“Block TEA”,它允许多个块或字,但仍使用 64 位块大小(我可能错了)。所以我对 nOFB 如何与 TEA 一起加密任何文本数据感到困惑。
我一直在关注 wikipedia 提供的 TEA 的实现,链接 - TEA Encryption。还有这个 - TEA Variants pdf。我仍然不知道如何将 OFB 或 nOFB 和 TEA 结合起来。
我所需要的只是一些指南或文本或参考资料或想法,可以详细解释上述任务。我可以自己实现。
matlab - 如何对 64 次幂进行模 2 加法
我想在 MATLAB 之间p1
和p2
使用 MATLAB 之间对 64 次幂执行加法模 2。p1
和都是p2
类型uint64
。下面的代码正确吗?
encryption - AES 128 CTR 纯文本大小不是块大小的倍数
我读到AES 128 CTR 模式应该适用于 16 字节(128 位)的块,如 CBC 模式。
实际上,如果我尝试使用 openssl 对 18 字节纯文本进行编码:
密文是 16 或 32 字节,取决于-nopad
参数的存在。
但如果我尝试点击率:
在每种情况下,密文都是 18 个字节,就像明文一样。
我不知道为什么
matlab - 如何修复双精度数据类型和 uint64 之间的精度差异
我正在使用 MATLAB 实现三鱼分组密码。起初,我在 uint8 数字上实现了算法来验证我的代码。一切正常,解密成功。但是当我将数字替换为 uint64 时,纯文本没有正确检索。
我一遍又一遍地追踪查房结果寻找原因,但至今找不到。加密和解密的前四位是有区别的,即沿x轮加密为9824265115183455531,但解密为9824265115183455488。
我认为这种差异背后的原因在于函数 AddMod64 和 SubMod64 找到算术模 2 的 64 次幂。但到目前为止我真的无法修复它。
我知道
和
java - php 中的 AES/CBC/PKCS5Padding java 等价物是什么?
我正在尝试将以下 java 代码段移植到 php,但不知何故,从 php 生成的输出与 java 的输出几乎不匹配。我究竟做错了什么?
Java 片段:
Java校验和输入/输出(虚拟数据):
等效的 PHP 代码段:
PHP校验和输出: