我有一个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
以这种方式保存:
^{pr2}$现在我必须用Python重新打开文件,但是我在获取单个字节时遇到了困难,这是Python中的XOR函数:
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,也就是说,不是一个字节。在
传递两个字节的事情不会破坏解密,因为密钥与以下数据保持“配对”。在
问题是某些解密字符在转换时出错。 这些字符都是重音字母,如a,è,ì,但是只有几个重音字母。其他的都恢复正常了。在
我想这可能是由于256模式,但没有它,我当然得到了一个chr例外。。。在
谢谢你的支持
解码后的数据似乎包含值大于256的unicode字符。在python2.x中,} 代替
chr
只能处理256以下的值。使用^{chr
,它应该可以工作:使用StreamWriter将加扰数据保存为字符串(即使用默认编码重新编码)是否正确?直接保存字节不正确吗? 还是一样的?在
哪个密码员。密码由调用StreamWriter写什么?在
这个
^{pr2}$还是这个?在
我不擅长Vb.net版... 在
我运行这个程序是为了得到正确/错误的“²”转换中涉及哪些字符
我知道了:
最后一个错误是因为使用了双字节。。。但是,如果只传递一个,那么剩下的解密可能会导致出相
事实上,下面这句话是错误的:
不能保证从Crypt返回的字节是否可以作为字符串解码。你最好用Convert.ToBase64String,然后将这个字符串传递给Python代码(显然,您需要能够对字节进行Base-64解码。在
正如其他人所指出的,XORing提供的安全级别足以保护您的数据不受您的小妹妹的影响。在
相关问题 更多 >
编程相关推荐