AttributeError: module ‘hashlib‘ has no attribute ‘scrypt‘调用werkzeug库generate_password_hash函数

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开头的密码

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值