C#解密到Python PyDes

时间:2016-11-03 20:22:59

标签: c# python encryption

在C#中,我有一个字节[24]字节数组,其中包含用于三重DES加密/解密的密钥。 c#中的一切都很棒。

我的问题是,如何在Python中使用相同的字节数组?

我正在使用PyDes包,我是python的新手所以我不知道它是不是接受字节数组的PyDes,或者是我做错了...

我的Python代码如下(我更改了此示例的密钥中的数据)。

from pyDes import *

print ("Example of DES encryption using CBC mode\n")

key = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
arr = bytearray(key)

k = triple_des(key, CBC, pad=None, padmode=PAD_PKCS5)
data = "DES encryption algorithm"
print ("Key      : %r" % k.getKey())
print ("Data     : %r" % data)

d = k.encrypt(data)
print ("Encrypted: %r" % d)

d = k.decrypt(d)
print ("Decrypted: %r" % d)
print ("")

错误是

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    k = triple_des(key, CBC, pad=None, padmode=PAD_PKCS5)
  File "/usr/lib/python2.7/site-packages/pyDes.py", line 710, in __init__
    self.setKey(key)
  File "/usr/lib/python2.7/site-packages/pyDes.py", line 727, in setKey
    self._padding, self._padmode)
  File "/usr/lib/python2.7/site-packages/pyDes.py", line 409, in __init__
    self.setKey(key)
  File "/usr/lib/python2.7/site-packages/pyDes.py", line 414, in setKey
    self.__create_sub_keys()
  File "/usr/lib/python2.7/site-packages/pyDes.py", line 462, in __create_sub_keys
    key = self.__permutate(des.__pc1, self.__String_to_BitList(self.getKey()))
  File "/usr/lib/python2.7/site-packages/pyDes.py", line 421, in __String_to_BitList
    data = [ord(c) for c in data]
TypeError: ord() expected string of length 1, but int found

更新。安装python 3并将我的密钥和IV设置为字节类型后,加密工作。问题是,它没有正确解密。

我的c#程序中的加密数据是: “你好世界。这只是一个考验。再见世界。”

它在我的python脚本中解密为: “\ xc3n)\ xf8J \ xaf \ xab \ x01rld。这只是一个测试。再见世界。”

什么会导致其中一半被正确解密,但第一部分不是?

1 个答案:

答案 0 :(得分:0)

似乎CBC应为pyDes.CBCPAD_PKCS5应为pyDes.PAD_PKCS5

k = triple_des(key, CBC, pad=None, padmode=PAD_PKCS5)

更改为:

k = triple_des(key, pyDes.CBC, pad=None, padmode= pyDes.PAD_PKCS5)

请参阅:pyDes

相关问题