title: Python 2 vs 3. Same inputs, different results. MD5 hash
body: <p>Python 3 code:</p>
  
  <pre><code>def md5hex(data):
      """ return hex string of md5 of the given string """
      h = MD5.new()
      h.update(data.encode('utf-8'))
      return b2a_hex(h.digest()).decode('utf-8')
  </code></pre>
  
  <p>Python 2 code:</p>
  
  <pre><code>def md5hex(data):
      """ return hex string of md5 of the given string """
      h = MD5.new()
      h.update(data)
      return b2a_hex(h.digest())
  </code></pre>
  
  <p>Input python 3:</p>
  
  <pre><code>&gt;&gt;&gt; md5hex('bf5¤7¤8¤3')
  '61d91bafe643c282bd7d7af7083c14d6'
  </code></pre>
  
  <p>Input python 2:</p>
  
  <pre><code>&gt;&gt;&gt; md5hex('bf5¤7¤8¤3')
  '46440745dd89d0211de4a72c7cea3720'
  </code></pre>
  
  <p>Whats going on?</p>
  
  <p>EDIT:</p>
  
  <pre><code>def genurlkey(songid, md5origin, mediaver=4, fmt=1):
      """ Calculate the deezer download url given the songid, origin and media+format """
      data = b'\xa4'.join(_.encode("utf-8") for _ in [md5origin, str(fmt), str(songid), str(mediaver)])
      data = b'\xa4'.join([md5hex(data), data])+b'\xa4'
      if len(data)%16:
          data += b'\x00' * (16-len(data)%16)
      return hexaescrypt(data, "jo6aey6haid2Teih").decode('utf-8')
  </code></pre>
  
  <p>All this problem started with this b'\xa4' in python 2 code in another function. This byte doesn't work in python 3.</p>
  
  <p>And with that one I get the correct MD5 hash...</p>