pbkdf2_hmac在django中需要很长时间

ui7jx7zq  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(75)

我正在对一个django rest framework 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请求的加密函数上?

jjjwad0x

jjjwad0x1#

pbkdf2在Django中用于散列密码--以一种不允许轻易复制原始密码的方式存储它们。它的运行速度很慢。由于它很难计算,所以强行输入原始密码需要很多时间。“
如果您想获得不那么慢的性能分析数据,您可以调低此计算所需的迭代次数,或者切换到另一个不安全的散列器,甚至是一个伪散列器。如需详细信息,请参阅Password management in Django
请记住,仅在测试和分析时调低它,因为在生产环境中以低迭代次数运行它会带来安全风险!

相关问题