У меня есть файл, зашифрованный XOR программой VB.net, использующей эту функцию для шифрования:
Public Class Crypter
...
'This Will convert String to bytes, then call the other function.
Public Function Crypt(ByVal Data As String) As String
Return Encoding.Default.GetString(Crypt(Encoding.Default.GetBytes(Data)))
End Function
'This calls XorCrypt giving Key converted to bytes
Public Function Crypt(ByVal Data() As Byte) As Byte()
Return XorCrypt(Data, Encoding.Default.GetBytes(Me.Key))
End Function
'Xor Encryption.
Private Function XorCrypt(ByVal Data() As Byte, ByVal Key() As Byte) As Byte()
Dim i As Integer
If Key.Length <> 0 Then
For i = 0 To Data.Length - 1
Data(i) = Data(i) Xor Key(i Mod Key.Length)
Next
End If
Return Data
End Function
End Class
и сохранил таким образом:
Dim Crypter As New Cryptic(Key)
'open destination file
Dim objWriter As New StreamWriter(fileName)
'write crypted content
objWriter.Write(Crypter.Crypt(data))
Теперь мне нужно снова открыть файл с помощью Python, но у меня возникают проблемы с получением отдельных байтов , это функция XOR в python:
def crypto(self, data):
'crypto(self, data) -> str'
return ''.join(chr((ord(x) ^ ord(y)) % 256) \
for (x, y) in izip(data.decode('utf-8'), cycle(self.key))
Мне пришлось добавить% 256, поскольку иногда x равен> 256, т.е. ни одного байта .
Эта вещь, передаваемая двумя байтами , не нарушает расшифровку , потому что ключ остается "спаренным" со следующими данными.
Проблема в том, что какой-то дешифрованный символ в конвертации неверен.
Все эти буквы являются акцентированными буквами, такими как à, è, ì, но всего лишь несколько из общих акцентированных букв . Все остальные правильно восстановлены.
Полагаю, это может быть связано с модом 256, но без него я, конечно, получаю исключение chr ...
Спасибо за вашу поддержку