【问题标题】:DES encryption function give me a cipher text that is wrongDES加密功能给我一个错误的密文
【发布时间】:2018-07-06 07:55:11
【问题描述】:

我已经在 haskell 中编写了 DES 算法,但是当我尝试它时,它没有给出正确的输出,我已经单独测试了每个函数,它们似乎工作正常,我接受了一条消息进行加密:明文 = 123456ABCD132536,密钥 = AABB09182736CCDD,当用 DES 加密时,它假设给我作为输出密文 = C0B7A8D05F3A829C。子键都是 (K1..K16) 正确的,l0, r0 也是正确的,l1, r1 , l2, r2 也是正确的,但是在第 3 轮,我得到 r3 = B00A9591 ,但它应该是 B8089591 根据 a我遵循的教程。

(我们有 r2 = 4A1210F6, 展开后它变成 2540A40A17AC, 在与子键 k3 = 6EDA4ACF5B5 异或后我们得到 23AD00A6E219, 替换后我们得到 232713FA, 在直接排列后我们得到 EA727605, 最后与 l2 = 5A78E394 我们得到 B00A9591)

在哪一点是不正确的?即使我用手做我得到相同的结果,我不明白问题是什么,因为第 3 轮使用的函数与第 1 轮和第 2 轮使用的函数相同,没有任何问题。有人可以给我 r3 的正确值,以及可能是什么问题的任何想法吗?我花了很长时间。谢谢。

【问题讨论】:

  • 您似乎从某个地方复制了这个问题。无论如何,如果您的代码有问题,您应该将其显示为Minimal, Complete and Verifyable example
  • 是的@ArtjomB。对不起,我问过密码学,但他们告诉我应该在这里问,好的,我会这样做
  • 您可以edit您的问题而无需提出新问题。
  • 在测试分组密码实现时,最好先用密钥 0...0 加密明文 0...0,以避开字节顺序或位顺序的问题。如果你得到 (0,0) 的正确答案,那么打开明文或密钥中的一个位。
  • 在第 3 轮中,S Boxes 输出 232713FA 是错误的。

标签: encryption cryptography des


【解决方案1】:

这是从 Eugene Styer 的 JavaScript DES Example 的副本完成的,该副本已被修改为允许通过删除只读属性和默认值来输入密钥。允许设置密钥的原始代码的副本曾经在 Google 代码上可用。

它产生输出密文c0b7a8d05f3a829c

Round 3  
E   :  001001 010100 000010 100100 000010 100001 011110 101100 2540A40A17AC  
KS  :  000001 101110 110110 100100 101011 001111 010110 110101 06EDA4ACF5B5  
E xor KS:  001000 111010 110100 000000 101001 101110 001000 011001 23AD00A6E219  
Sbox:  0010 0011 0010 0111 0001 0011 1111 0000 232713FA  (should be 232713F0)  
P   : 11100010 01110000 01110110 00000101 EA727605 (should be E2707605)  
L[i]: 01001010 00010010 00010000 11110110  
R[i]: 10111000 00001000 10010101 10010001  

您的十六进制输出已被注释,并告诉我们 S Box 8 的第 01 行索引 12 (1100) 产生的输出为 1010,而它应该是 0000。

来自 FIPS Pub 46 的 S Box 8 值:

    13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7,
     1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,
     7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8,
     2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11,

向下的第二行,第 13 列元素。

对于标记为 B1 到 B6 的 6 位输入 011001,通过连接 B1 和 B6(01 或从 0 计数的第 1 行)找到行,通过连接 B2 到 B5 (1100) 找到列。

以下 P 排列的差异由两个意外的“1”位解释。

如果没有Minimal Complete and Verifiable example,则无法确定这是否是唯一的错误。

有关测试向量的信息,请参阅vhdl - Data Encryption Standard test vectors - Stack Overflow,其中允许使用由全零组成的密钥测试 S 框。 (答案最后一段的Dropbox链接仍然有效。)

显示对 JS-DES.html 的修改的差异:

623c623
<         <td><input name="key" value="0000000000000000" size="25" type="text"></td>
---
>         <td><input name="key" value="3b3898371520f75e" readonly="readonly" size="25" type="text"></td>
627c627
<         <td><input name="keyb" value="0000000000000000" size="25" type="text"></td>
---
>         <td><input name="keyb" value="922fb510c71f436e" readonly="readonly" size="25" type="text"></td>

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多