title: Using hashlib to compute md5 digest of a file in Python 3
body: <p>With python 2.7 the following code computes the mD5 hexdigest of the content of a file.</p>
  
  <p>(EDIT: well, not really as answers have shown, I just thought so).</p>
  
  <pre><code>import hashlib
  
  def md5sum(filename):
      f = open(filename, mode='rb')
      d = hashlib.md5()
      for buf in f.read(128):
          d.update(buf)
      return d.hexdigest()
  </code></pre>
  
  <p>Now if I run that code using python3 it raise a TypeError Exception:</p>
  
  <pre><code>    d.update(buf)
  TypeError: object supporting the buffer API required
  </code></pre>
  
  <p>I figured out that I could make that code run with both python2 and python3 changing it to:</p>
  
  <pre><code>def md5sum(filename):
      f = open(filename, mode='r')
      d = hashlib.md5()
      for buf in f.read(128):
          d.update(buf.encode())
      return d.hexdigest()
  </code></pre>
  
  <p>Now I still wonder why the original code stopped working. It seems that when opening a file using the binary mode modifier it returns integers instead of strings encoded as bytes (I say that because type(buf) returns int). Is this behavior explained somewhere ?</p>