我已经用haskell写了DES算法,但是当我尝试它的时候,它没有给出正确的输出,我已经测试了每个函数本身,它们似乎工作正常,我已经拿了一条消息进行加密: plainText = 123456ABCD132536,密钥= AABB09182736CCDD,当用DES加密时,它应该给我输出cipherText = C0B7A8D05F3A829C。子键都是正确的(K1..K16),l0,r0也是正确的,l1,r1,l2,r2也是正确的,但在第三轮,我得到了r3 = B00A9591,但根据我遵循的教程,它应该是B8089591。
( r2 = 4A1210F6,展开后为2540A40A17AC,与子键k3 = 6EDA4ACF5B5进行异或后得到23AD00A6E219,替换后得到232713FA,直排后得到EA727605,最后与l2 = 5A78E394进行异或得到B00A9591)
在哪一点上是不正确的?即使我手工操作,我也得到了相同的结果,我不知道问题是什么,因为第三轮使用的函数与第一轮和第二轮使用的相同,没有任何问题。有没有人能告诉我r3的正确值,以及问题出在哪里?我花了很长时间。谢谢。
发布于 2016-09-09 23:35:48
这是从Eugene Styer的JavaScript DES Example的副本中完成的,该副本已被修改,允许通过删除只读属性和默认值来输入密钥。允许设置密钥的原始代码的副本可以在Google Code上使用。
它产生输出密文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框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的修改的diff:
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>
https://stackoverflow.com/questions/39397607
复制相似问题