Я выполнял 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