0

私はデータの 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'

テキストは、両方の方法で同じ「コードが機能しません」である必要があります。正しいコードの断片だけでなく、その理由を知りたいです。ありがとう。

4

1 に答える 1