Files
qgreper/captcha.py
David Hoppenbrouwers e9ef9140f0 Add registration
2022-10-08 15:25:28 +02:00

21 lines
647 B
Python

from random import randint
import hashlib, base64
# FIXME hash can be reused
def generate(key):
'''
Generate a simple CAPTCHA.
It is based on a simple math expression which stops the simplest of bots.
'''
# The parameters are chosen such that they are simple to solve on paper.
a = randint(1, 10)
b = randint(1, 10)
c = randint(10, 20)
return f'{a} * {b} + {c} = ', _hash_answer(key, str(a * b + c))
def verify(key, answer, hash):
return _hash_answer(key, answer) == hash
def _hash_answer(key, answer):
return base64.b64encode(hashlib.sha256((key + answer).encode('utf-8')).digest()).decode('ascii')