51 lines
No EOL
997 B
Ruby
51 lines
No EOL
997 B
Ruby
class DecodeImage
|
|
@@password = ""
|
|
@@utils
|
|
|
|
def initialize(pass, image)
|
|
@@password = pass
|
|
|
|
# initializing utils...
|
|
@@utils = ImageUtils.new(@@password, image)
|
|
|
|
@@table = @@utils.generateLookupTable
|
|
end
|
|
|
|
def decode
|
|
s = @@utils.getImage.getSize
|
|
|
|
msg_bits = 0
|
|
|
|
@@table.reverse.each do |loc|
|
|
pixel = @@utils.getImage.getPixel(loc[:x], loc[:y])
|
|
msg_bits = (msg_bits << 6) | pixel.decodeBits
|
|
end
|
|
|
|
#this trash needs to move somewhere...
|
|
puts "Try to convert the message..."
|
|
len = msg_bits & 0xffff
|
|
msg_bits = msg_bits >> 16
|
|
|
|
# check the padding bits....
|
|
if (msg_bits & 255) != 0 then
|
|
puts "Padding failed scrutiny! "
|
|
puts msg_bits.to_s(2)
|
|
return false
|
|
end
|
|
|
|
msg_bits = msg_bits >> 8
|
|
|
|
puts "Padding passed scrutiny..."
|
|
msg_chars = []
|
|
|
|
while msg_bits > 0 do
|
|
byte = msg_bits & 0xff
|
|
msg_chars.push(byte.chr)
|
|
msg_bits = msg_bits >> 8
|
|
end
|
|
|
|
msg = msg_chars.reverse.join
|
|
|
|
return msg
|
|
end
|
|
end |