1 背景介绍:
在使用flask框架开发用户管理模块时,有对密码进行加密存储的需求。作者使用了python版本为3.9 flask版本 3.0.3 werkzeug版本3.0.2
2 问题描述:
作者使用flask框架时,werkzeug库中的generate_password_hash函数加密,并用 check_password_hash函数验证密码,在本机上运行无误,但把同样的代码放置到腾旭云服务器上运行后,一直报错。反复检查了二者的版本区别,发现是一致的。
报错内容:报错内容是调用hashlib的库发现没有scrypt,尝试安装了这两个库也无法解决问题。
3问题分析:
缺少了scrypt这个哈希算法的支持。generate_password_hash 函数默认使用的是werkzeug.security模块中的scrypt哈希算法,但是云环境中找不到它。这可能是因为云环境中缺少了所需的库或者模块。
4解决方案:
可以考虑使用其他哈希算法替代。werkzeug.security模块也提供了其他的哈希算法,比如pbkdf2_sha256,你可以尝试使用它来代替scrypt。只需要在调用generate_password_hash函数时指定相应的方法即可
from werkzeug.security import generate_password_hash
hashed_password = generate_password_hash('your_password', method='pbkdf2:sha256')
5值得注意:
之前默认的方法对密码进行加密后,记得运行新的方法加密,否则登录调用check_password_hash函数验证密码时,一样会调用scrypt报错,从密码中可以看出,原来默认加密的是scrypt开头,后续是pbkdf2开头的密码