我试图用python编写一个简单的加密脚本。我只想对二进制文件使用异或加密。 我的剧本基本上是这样的:
def xor_c ( a ):
v=''
for p in a:
v += chr((ord(p) ^ 0xA8))
return v
这样做的目的只是对每个字节进行单独加密。 这应该行得通,但我做的所有尝试都失败了。
我第一次尝试:
handler = open("file",'r')
handler2 = open("output",'w')
contents = handler.read()
handler2.write(xor_c(xor_c(contents)))
但是在执行之后,这两个文件file
和output
是不同的。
因为输入文件是一个二进制文件(我想要什么),所以我将脚本更改为:
handler = open("file",'rb')
handler2 = open("output",'wb')
contents = handler.read()
handler2.write(xor_c(xor_c(contents)))
但这一点也没有改变。
从外观上看,一些字节对在输出端仅转换为一个字节(可能是因为字符不是ascii,但这不应该在二进制模式下发生…)。此外,输出的最后一个字节是0xA8
(逻辑上是从输入文件末尾的\0
转换而来的)。考虑到这一点,我还将xor_c
函数更改为:
def xor_c ( a ):
v=''
for p in a:
v += chr((ord(p) ^ 0xA8))
return v[:-1]+'\0'
确保最后一个字符始终是\0
,但这也不起作用。
有什么建议吗?评论?提示?
谢谢
(对不起,我一开始误读了这个问题)
我认为问题可能在于}
v
初始化:v
不应该是string
,而应该是^{我没有工具来验证。
如果您只想执行异或,那么如果使用
bytearray
,则不需要chr()
和ord()
。事实上,你的功能就变成了一条直线
而且效果很好
你的例子有问题。这是输入:
这是双异或后的输出:
注意,在某些地方“'”被转换成
i
或aj
。这是不可能与一个普通的双异或。你确定你使用了我上面提供的代码吗?因为如果我在二进制文件上运行它,两次异或数据等于原始数据:
当我将数据写入磁盘并进行比较时,文件也是相同的:
相关问题 更多 >
编程相关推荐