У меня есть зашифрованный файл 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...
Спасибо за поддержку