Estoy escribiendo mi propio sistema de captcha para el registro de usuarios. Entonces, necesito crear una URL adecuada para recibir imágenes captcha generadas. Generación se ve así:Django urlsafe decodificación base64 con descifrado
_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)
Pero entonces yo estoy tratando de recibir esta tecla mediante petición GET en la función de vista, se produce un error en urlsafe_b64decode() con "asignación de caracteres debe devolver número entero, Ninguno o Unicode" error:
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()
me encontré con que en la salida del urlsafe_b64encode hay un str, pero solicitud GET devuelve un objeto unicode (sin embargo, se trata de una cadena de la derecha). Str() no ayudó (devuelve el error de decodificación en el interior de django), y si uso la clave. repr funciona, pero el descifrador no funciona con un error "Las cadenas de entrada deben ser múltiplos de 16". Dentro de un archivo de prueba, toda esta construcción funciona perfectamente, no puedo entender, ¿qué pasa?
¿Es necesario el cifrado? ¿No podría la generación del captcha almacenar la respuesta correcta en el servidor de datos de sesión? ¿O estás tratando de evitar eso? – MattH
Simplemente no lo pensé aún. Pero este problema es interesante y quiero entender por qué ocurre. – Enchantner
'key = str (request.REQUEST ['key'])' no funciona? – MattH