Правех малко XOR на данни и нещата вървяха добре с моя шестнадесетичен XOR. Препоръчва се да използвам байт XOR (^) и да работя само с байтове. Мислех, че няма да отнеме време да променя това, но имам някакво странно поведение, което не очаквах.
Може ли някой да добави малко светлина защо получавам различен резултат, ако обработвам низа като байтове. Очаквах да е същото.
m_hex_string ="124f33e6a118566377f237075354541f0a5a1b"
m_XOR_string ="662756c6c27732065796586974207468652870"
m_expected ="the code don't work"
m_expected_hex ="74686520636f646520646f6e277420776f726b"
def XOR_hex_strings(a,b)
(a.hex ^ b.hex).to_s(16)
end
def XOR_byte_strings(s1,s2)
xored = s1.bytes.zip(s2.bytes).map { |(a,b)| a ^ b }.pack('c*')
end
def hex_digest(hexdigest)
[hexdigest].pack("H*")
end
puts "My strings for stack overflow"
puts "'"+hex_digest(XOR_hex_strings(m_hex_string,m_XOR_string))+"'"
puts "'"+hex_digest(XOR_byte_strings(m_hex_string,m_XOR_string))+"'"
Резултати:
My strings for stack overflow
'the code don't work'
'tje`#ode ?on't ~mrk'
Текстът трябва да е един и същ „кодът не работи“ и за двата метода. Наистина бих искал да знам защо, а не просто правилен кодов фрагмент. Благодаря.
.bytes
, не е знаел, че вашите низове са шестнадесетични низове - person John Dvorak   schedule 08.05.2013