Tôi đang viết hệ thống captcha của riêng mình để đăng ký người dùng. Vì vậy, tôi cần phải tạo một URL phù hợp để nhận ảnh được tạo bằng hình ảnh xác thực. Thế hệ trông như thế này:Giải mã base64 của Django urlsafe với giải mã
_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)
Nhưng sau đó tôi đang cố gắng để nhận khóa này qua yêu cầu GET trong hàm xem, nó không thành công trên urlsafe_b64decode() với "bản đồ nhân vật phải trả lại số nguyên, Không có hoặc unicode" lỗi:
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()
tôi thấy rằng trên đầu ra của urlsafe_b64encode có một str, nhưng GET yêu cầu trả về một đối tượng unicode (tuy nhiên nó là một chuỗi bên phải). Str() đã không giúp đỡ (nó trả về lỗi giải mã sâu bên trong django), và nếu tôi sử dụng khóa. repr nó hoạt động, nhưng bộ giải mã không hoạt động với lỗi "Chuỗi đầu vào phải là bội số của độ dài 16". Bên trong một tập tin kiểm tra tất cả các công trình xây dựng này hoạt động hoàn hảo, tôi không thể hiểu, có gì sai?
Mã hóa có cần thiết không? Không thể tạo captcha lưu trữ câu trả lời chính xác ở phía máy chủ dữ liệu phiên? Hay bạn đang cố tránh điều đó? – MattH
Chưa nghĩ về nó. Nhưng vấn đề này rất thú vị và tôi muốn hiểu tại sao nó lại vui vẻ. – Enchantner
'key = str (request.REQUEST ['key'])' không hoạt động? – MattH