26 lines
664 B
Python
26 lines
664 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")
|