C# Decryption to Python PyDes
本文关键字:PyDes Python to Decryption | 更新日期: 2023-09-27 18:16:16
在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#程序中的加密数据是:"Hello World。这只是一个测试。再见世界。"
它在我的python脚本中解密为:"' xc3n) ' xf8J ' xaf ' xab ' x01rld。这只是一个测试。再见世界。"
是什么导致其中一半可以正确解密,而第一部分不能?
在
中CBC
应该是pyDes.CBC
, PAD_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。