解密MDES密文

时间:2019-02-07 20:51:55

标签: encryption des feistel-cipher

我正在尝试使用一种自定义DES样式的加密,但是在解密时遇到了麻烦。

根据我的理解,Feistel密码仅通过以向后的顺序将密钥反馈给密文即可解密密文,但这似乎行不通。

我们是否也必须反转键或Li,Ri的顺序?

我的Python代码:

def Encrypt (plainString):

l0=plainString[0:8]
r0=plainString[8:16]
l1=r0
fOutcome1=bitManage (r0,key[0:12])
r1=xorHelper (r0,fOutcome1)
l2=r1
fOutcome2=bitManage (r1,key[12:24])
r2=xorHelper (l1,fOutcome2)
rawCipherText= l2+r2
return rawCipherText

def desDecrypt (plainString):
l0=plainString[0:8]
r0=plainString[8:16]
l1=r0
fOutcome1=bitManage (r0,key[12:24])
r1=xorHelper (l0,fOutcome1)

l2=r1
fOutcome2=bitManage (r1,key[0:12])
r2=xorHelper (l1,fOutcome2)
rawCipherText= l2+r2
return rawCipherText

Here is the code for BitManage

给出Feistel密码的基本公式: 李= Ri-1 Ri = Li-1⊕f(Ri-1,Ki)。

我只是进行了两轮加密。

  1. 我输入一个字符串
  2. 将其转换为数值(a = 0 ...直到31)
  3. 转换为位串
  4. 加密16位字符串块。
  5. 解密相同的块
  6. 重新组合这些块(因此您只有一个字符串),然后再次分成5位字符串以获取字符的数值,然后转换回字母。

因此,我应该能够只将f(Encrypt)中的密钥调度反向转换为f(Decrypt),并获得正确的答案,但是我又变得胡言乱语了。

有关更多信息:密钥是一个24位的整数,对于f函数,L0,R0的8位通过一个单独的程序传递,该程序将它们扩展为12位,然后将它们与圆键,然后将它们通过S-box。我检查了此f函数的值,它似乎工作正常。

问题是“ BitManage”功能吗?我唯一看到的问题是位扩展(通过将奇数索引处的所有值加到位扩展,我将8位值变成12位)字符串的结尾),但我不确定为什么会导致问题。

0 个答案:

没有答案