问题标签 [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 回答
663 浏览

encryption - 加密算法分组密码和流密码

流密码和分组密码有什么区别?因为在分组密码中数据在卡盘中,而在流密码中逐位加密,所以在流密码中输入了多少数据?

0 投票
1 回答
1229 浏览

java - 斑点算法不起作用

我正在尝试在 java中实现Speck 64 位块/128 位密钥密码。我被困在加密/解密算法上。我的解密算法无法正确解密密文。

我的实现:

  • 加密:

    /li>
  • 解密:

    /li>

xy由函数装箱初始化(<- 有点奇怪):

请注意,内容是 8 个字符的 int 数组。

我把解密放在加密后面,所以我可以看看这个算法是否真的有效,但它不是,我不知道为什么。(在我使用解密之前,我将变量重置为正确的值)。

参考

编辑:

  • 旋转功能:

    /li>
0 投票
0 回答
476 浏览

c# - 如何在不影响其他进程的情况下从 Schannel 添加/删除密码套件?

如何通过调用 API“BCryptAddContextFunction”和“BCryptRemoveContextFunction”从 Schannel 添加/删除密码套件而不影响其他进程?

例如,如果进程“A”调用这些 API 并更改密码套件,则其他进程(例如“B”或“C”不应影响这意味着“B”或“C”应该能够使用默认密码套件。

我编写了以下代码,这些代码也影响了其他进程。

实际上,我想在使用 TLS 1.2 与服务器通信时为我的客户端应用程序阻止弱密码套件,但问题是我设置的任何内容也会影响其他应用程序。我怎样才能只为我的应用程序阻止弱密码套件而不影响其他人。

注意:我的应用程序是用 C# 编写的,我正在使用 P/Invoke 调用这些 API。

0 投票
0 回答
22 浏览

java - 实现接受十六进制值的 xxtea 算法

我必须用 XXTEA 算法加密代码。

密码 = 16 字节密钥 = 8 字节

示例:键:0xAA 0xBB 0xCC 0xDD 0xAA 0xBB 0xCC 0xDD 0xAA 0xBB 0xCC 0xDD 0xAA 0xBB 0xCC 0xDD

味精:0xFF 0xFF 0x87 0x30 0xFF 0xFF 0x87 0x30

我期待这个加密的结果:0X24 0x81 0xCE 0x89 0xA5 0x58 0x57 0x35

现在我正在使用此代码:https ://code.google.com/p/ths-java/source/browse/trunk/ths/crypto/XXTEA.java?r=2

但对我来说,将此代码与十六进制字节值一起使用更加困难,因为 byte 函数给了我错误的值。

如何实现接受十六进制值并在字节数组中返回加密值的算法

编辑:我知道如何将十六进制转储字符串转换为字节数组(我在 stackoverflow =D 上学到了它),但我的问题是,如果我使用byte[] encrypt(byte[] data, byte[] key)我会得到错误的结果。

0 投票
3 回答
1195 浏览

c# - c# 整数的格式保留加密

我需要生成将用作代金券或类似物品的兑换代码的数字代码。要求是代码是数字的,并且对于收款机操作员的数据输入速度而言相对较短。大约 6 个字符长和数字。我们知道这是一个很小的数字,因此我们制定了一个流程,以便代码可以过期并被重新使用。

我们一开始只使用顺序整数生成器,它在生成唯一代码方面效果很好。这样做的问题是生成的代码是连续的,因此可以预测,这意味着客户可以猜测我们生成的代码并兑换不适合他们的代金券。

我一直在阅读Format Preserving Encryption这似乎对我们有用。我们不需要在任何时候解密代码,因为代码本身是任意的,我们只需要确保它是不可预测的(由普通人)。这对安全并不重要,只是让诚实的人保持诚实。

维基百科文章中引用了各种密码,但我有非常基本的密码学和数学技能,无法编写自己的代码来基于密码实现这一目标。

我想我的问题是,有没有人知道 ac# 的实现,它将一个整数加密为另一个整数并保持相同的长度?

FPE 似乎可以很好地用于将 16 位信用卡号码加密为另一个 16 位号码。我们需要相同类型的东西,但不一定固定为长度,但只要纯值长度与加密值长度匹配即可。

所以以下四个整数将被加密

从 123456 123457 123458 123459

像这样不连续的东西

521482 265012 961450 346582

我对实现此 FPE 的任何其他建议持开放态度,这似乎是一个不错的选择。

编辑

感谢有关仅生成唯一代码并存储它们并检查重复项的建议。现在我们避免这样做,因为我们不想在生成时检查存储。这就是我们使用顺序整数生成器的原因,因此我们不需要检查代码是否唯一。我将重新研究这样做,但现在仍在寻找避免每次生成代码时都必须去存储的方法。

0 投票
0 回答
49 浏览

windows - Schannel 密码命名约定

我正在研究禁用某些密码,并且试图了解如何在 Windows 中命名分组密码。具体来说,名称后面的数字是什么意思。例如,RC4 40/128、DES 56/56、AES 128/128 或 AES 256/256。我想这可能是密钥大小/块大小,但这没有意义。以 AES 256/256 为例。据我了解,要成为 AES,它需要 128 的块大小。因此,最后一个数字不能指定块大小。或者采用 RC4 密码。看起来第一个数字是密钥大小,但它是流密码,那么 128 是多少?或 DES 56/56。我认为 DES 的密钥大小为 56 位,块大小为 64 位?有人知道命名背后的历史或原因吗?

0 投票
1 回答
76 浏览

c# - System.IndexOutOfRangeException 使用 c# 输入块密码

我尝试使用自己的模式将二进制输入输入到 256 位长的分组密码中。

使用输入类

有规则

结果是 binary_[i] 与指定数组不匹配,带有描述IndexOutOfRangeException was unhandled

0 投票
1 回答
991 浏览

c# - 尝试实现 Speck32/64 块密码

我正在尝试在 c# 中实现 Speck 32/64 块密码我被困在加密解密算法中。我知道我应该根据算法将纯文本分成 2 个单词

参考

轻量级分组密码的 SIMON 和 SPECK 系列 https://eprint.iacr.org/2013/404

我的问题是明文应该是字符串然后我转换为二进制或什么并在上面的算法中使用它?该算法没有说明文的类型,并且有示例加密

0 投票
2 回答
292 浏览

java - 获取密钥流 - Java 解密

我正在使用 Java 的 Cipher 类进行解密。

几个问题:

  1. 使用 DES 解密和 OFB 进行多部分解密,是否可以在第一次迭代中生成密钥流,但不使用该密钥流进行异或运算,但仍将密钥流输入下一个分组密码?

我的代码(简要)如下:

我不确定它是否确实在更新(虚拟)操作中跳过了 XORing,然后将密钥流用于下一个分组密码。

  1. 是否可以检索每个操作的密钥流?看看到底生成了什么会很好。

谢谢希夫

0 投票
1 回答
1075 浏览

aes - AES-CCM 加密消息长度

请给我解释一下:

我通过 AES-CCM 使用 8 字节 MAC 加密了 1 字节纯文本。结果是 9 个字节长。

我认为 AES 是一个 16 字节的分组密码,所以结果必须是 24 字节长,但事实并非如此。

这绝对不是我的代码中的错误,因为 RFC 3610 中的示例与我的情况非常相似(31 字节数据 + 8 字节 MAC 导致 39 字节输出)。