簡體   English   中英

C#解密為Python PyDes

[英]C# Decryption to Python PyDes

在C#中,我有一個byte [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.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM