私はデータの XOR を行っていましたが、16 進数ベースの 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'
テキストは、両方の方法で同じ「コードが機能しません」である必要があります。正しいコードの断片だけでなく、その理由を知りたいです。ありがとう。