title: Django urlsafe base64 decoding with decryption
body: <p>I'm writing my own captcha system for user registration. So I need to create a suitable URL for receiving generated captcha pictures. Generation looks like this:</p>
  
  <pre><code>_cipher = cipher.new(settings.CAPTCHA_SECRET_KEY, cipher.MODE_ECB)
  _encrypt_block = lambda block: _cipher.encrypt(block + ' ' * (_cipher.block_size - len(block) % _cipher.block_size)) 
  #...
  a = (self.rightnum, self.animal_type[1])
  serialized = pickle.dumps(a)
  encrypted = _encrypt_block(serialized)
  safe_url = urlsafe_b64encode(encrypted)
  </code></pre>
  
  <p>But then I'm trying to receive this key via GET request in the view function, it fails on urlsafe_b64decode() with "character mapping must return integer, None or unicode" error:</p>
  
  <pre><code>def captcha(request):
    try:
      key = request.REQUEST['key']
      decoded = urlsafe_b64decode(key)
      decrypted = _decrypt_block(decoded)
      deserialized = pickle.loads(decrypted)
      return HttpResponse(deserialized)
    except KeyError: 
      return HttpResponseBadRequest()
  </code></pre>
  
  <p>I found that on the output of urlsafe_b64encode there is an str, but GET request returns a unicode object (nevertheless it's a right string). Str() didn't help (it returns decode error deep inside django), and if I use key.<strong>repr</strong> it works, but decryptor doesn't work with an error "Input strings must be a multiple of 16 in length".
  Inside a test file all this construction works perfectly, I can't understand, what's wrong?</p>