在Ruby中打开文件时出现Zlib数据错误 - 在指定字符串时有效

时间:2015-07-25 15:25:09

标签: ruby zlib

我写了一些代码来反转Ruby中基于XOR的加密。 chipertext与'key'进行异或,输出传递给Zlib.deflate

require 'zlib'

def bin_to_hex(s)
  s.unpack('H*').first
end


def hex(s)
  s.scan(/../).map { |x| x.hex }.pack('c*')
end

chipertext = "Encrypted data"

key = "Some encryption key"

puts hex((bin_to_hex(Zlib::Inflate.inflate(code)).to_i(16) ^ ((bin_to_hex(key) * (bin_to_hex(Zlib::Inflate.inflate(chipertext)).length/bin_to_hex(key).length)) + bin_to_hex(key)[0, bin_to_hex(Zlib::Inflate.inflate(chipertext)).length%bin_to_hex(key).length]).to_i(16)).to_s(16))

在上面的示例中,当我将chipertext指定为字符串时,代码运行完美。但是,当我使用chipertext = File.open(ARGV[0], 'rb') { |f| f.read }之类的代码时,我会得到一个inflate: incorrect header check (Zlib::DataError)

如何防止这种情况发生?

0 个答案:

没有答案