我正在对数据进行一些异或运算,我的基于十六进制的异或运算进展顺利。建议我使用字节 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'
对于这两种方法,文本应该是相同的“代码不起作用”。我真的很想知道为什么而不仅仅是一个正确的代码片段。谢谢。