【问题标题】:XOR binary file in RubyRuby 中的 XOR 二进制文件
【发布时间】:2015-05-27 23:39:56
【问题描述】:

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

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

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

你能帮我弄明白怎么回事吗?

【问题讨论】:

  • 至少你需要从文件中读取字节(检查你刚刚创建的文件——它只有几个字节长)
  • function 这个词很模糊,至少在 Ruby 的上下文中是这样。 Ruby 中的函数是什么?如何创建函数?这是一个问自己的好问题,虽然问起来可能不够有趣,或者你已经知道答案,但人为错误就在那里,你想说method而不是function

标签: ruby file-io binary


【解决方案1】:

在文件句柄上调用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 是错误的,因为它附加了换行符。

【讨论】:

  • 非常感谢@tadman!效果很好!意识到puts 错误而不是write
猜你喜欢
  • 2012-12-31
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多