Ответ 1
Scrypt и BCrypt являются чрезвычайно насыщенными процессорами (по дизайну). Из-за этого я очень сомневаюсь, что реализация pure-python будет достаточно быстрой, чтобы быть безопасной, т.е. Иметь возможность хеширования, используя достаточное количество раундов в течение разумного промежутка времени.
Я лично могу подтвердить это, я пробовал писать чип-скрипт с чистым питоном, и это было слишком медленно, чтобы быть полезным. Документы для реализации bcrypt pure-python, упомянутые в другом ответе, отмечают этот точный недостаток - остерегаться использования его для реальной безопасности, его раунды должны быть слишком низкими. Единственный раз, когда такие реализации будут достаточно быстрыми, находится под pypy, и это не та ситуация, с которой вы столкнулись.
То, что вы хотите использовать, - это что-то, основанное на доступном хэш-примитиве, таком как SHA-2. Таким образом, бит тяжелого вычисления будет по-прежнему записываться на C, даже под GAE. Я бы рекомендовал что-то, основанное на PBKDF2 или SHA-512-Crypt (обратите внимание: это не просто простой хэш sha512). Безопасность алгоритмов так же хороша, но реализация на чистом питоне будет намного более эффективной, поскольку они могут использовать hashlib
для тяжелого подъема.
Библиотека Passlib может быть полезна в этом случае, она содержит реализации PBKDF2 и SHA-512-Crypt в чистом питоне. (Отказ от ответственности: я являюсь автором этой библиотеки). Другая библиотека Python с поддержкой PBKDF2 - Cryptacular.