Ruby中的XOR二进制文件

时间:2015-05-27 14:44:43

标签: ruby file-io binary

我正在尝试在Ruby中创建一个“xor”函数,它接受输入二进制文件和十六进制值,并在输出中生成一个xored二进制文件。

File.open("myfile.exe.xor",'w') do |f_xor|
  f_xor.puts File.open("myfile.exe", 'rb').to_i ^ 0xFF
end

此代码似乎没有返回正确的xored文件,因为预期的MD5不同。 到目前为止,我一直在使用XOR命令行工具,但我想切换到与操作系统无关的版本,以便在Windows上部署代码。

你能帮我理解什么是错的吗?

1 个答案:

答案 0 :(得分:0)

在文件句柄上调用to_i会返回它的低级标识符,这是一个单数,仅此而已。

如果你想对字节本身进行操作:

File.open(input_file, 'rb') do |f|
  File.open(output_file, 'wb') do |o|
    o.write(
      f.read.bytes.collect do |byte|
        byte ^ xor_value
      end.pack("C*")
    )
  end
end

这里的关键是对文件中的每个字节应用XOR运算,然后写出结果。使用puts是错误的,因为它会附加换行符。