Ruby 中的 XOR 二进制文件

XOR binary file in Ruby

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

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

此代码似乎无法 return 正确的 xored 文件,因为预期的 MD5 不同。 到目前为止,我一直在为 Linux 使用 XOR 命令行工具,但我想切换到与 OS 无关的版本,以便在 Windows.

上部署代码

你能帮我了解一下哪里出了问题吗?

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

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

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

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