python - pbkdf2_hmac 在 django 中需要很长时间

标签 python django django-rest-framework

我正在对 django rest 框架 API 进行一些分析,并使用基于 cProfile 的分析中间件,我得到了以下输出:

Sat Mar  2 23:55:13 2019    /var/folders/jr/something
41224 function calls (40529 primitive calls) in 0.182 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.124    0.124    0.124    0.124 {built-in method _hashlib.pbkdf2_hmac}
   11    0.006    0.001    0.007    0.001 {method 'execute' of 'psycopg2.extensions.cursor' objects}
  252    0.003    0.000    0.003    0.000 {built-in method posix.stat}
   11    0.002    0.000    0.009    0.001 /Users/my-local-user/.pyenv/versions/3.7.0/lib/python3.7/traceback.py:312(extract)

基于此,调用一次_hashlib.pbkdf2_hmac几乎占了我单个请求总执行时间的70%!

除了它在 openSSL 中使用之外,我还没有找到大量关于此的信息 - 但我在没有 ssl 的情况下在本地运行。

为什么我要花这么多时间在一个简单的 API 请求的加密函数上?

最佳答案

pbkdf2 被设计成运行缓慢。它的目的是难以计算,因此暴力破解需要花费大量时间。

如果您希望在没有这种缓慢的情况下获得分析数据,您可以调低此计算所采用的迭代次数。参见 Password management in Django更多细节。请记住将其调低仅用于测试和分析,因为在生产环境中以低迭代次数运行它存在安全风险!

关于python - pbkdf2_hmac 在 django 中需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964307/

相关文章:

python - 列出一个类的所有属性

Python:如何将文件夹列表(带有子文件夹)移动到新目录

python - 使用 map() 函数的整数列表输入的绝对值

python - 如何在 django 模板中转义 LaTeX 特殊字符?

django - Django 1.6.2 中的 HTTP_HOST header 无效

python - Django 。如何在子模型中存储来自 mixin 的父模型字段?

python蜘蛛返回空json文件

python - django服务器启动时如何启动后台线程?

python - 当父记录存在时,如何在 django rest 框架中的子序列化程序中设置外键值

django-rest-framework - View 和 View 集之间的区别?