Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aula: Hashing de Senhas - passlib gera um aviso no atributo __about__ do bcrypt #123

Closed
sksdutra opened this issue Apr 6, 2024 · 3 comments

Comments

@sksdutra
Copy link

sksdutra commented Apr 6, 2024

Não creio que seja nada que fará o código deixar de funcionar, mas no arquivo "security.py", a execução da função "get_password_hash" gera o seguinte aviso (mas ainda assim retorna um resultado):

get_password_hash("teste")
(trapped) error reading bcrypt version
Traceback (most recent call last):
  File "/home/sksdutra/Dev/pyenvs/fzero-JcMmLBH0-py3.11/lib/python3.11/site-packages/passlib/handlers/bcrypt.py", line 620, in _load_backend_mixin
    version = _bcrypt.__about__.__version__
              ^^^^^^^^^^^^^^^^^
AttributeError: module 'bcrypt' has no attribute '__about__'
'$2b$12$MSeXkM.MoJEQj811Y8/ez.3e4V4SYWywp4dIIc/2dJDGIByq/Neh.'

Pelo que andei lendo, a biblioteca passlib não é mais atualizada faz pelo menos 3 anos: pyca/bcrypt#684 e para continuar usando passlib, sem que esse aviso seja disparado, é necessário forçar a bcrypt para a versão 4.0.1.

Para contornar esse aviso, usei uma sugestão na issue acima de usar diretamente o módulo bcrypt:

import bcrypt

def hash_password(password: str):
    return bcrypt.hashpw(
        password=password.encode("utf-8"),
        salt=bcrypt.gensalt() # gerará um salt para cada senha, melhor tornar isso constante
    )


def verify_password(plain_password: str, hashed_password: str):
    return bcrypt.checkpw(
        password = plain_password.encode('utf-8'),
        hashed_password = hashed_password
    )

Resultado:

>>> from security import hash_password, verify_password
>>> hashed_password = hash_password("teste")
>>> hashed_password
b'$2b$12$ns09Nm31odmHvsSfK1/EYO0cavnDgm4B4/yojJNo.qgtDT7wIsG3.'
>>> verify_password("teste", hashed_password)
True

Ademais, o bcrypt usa byte strings, não sei se isso afetará em alguma coisa, creio que não. Se afetar teremos que usar um decode nessas strings.

@dunossauro
Copy link
Owner

dunossauro commented Apr 6, 2024

Isso está realmente tomando uma forma. O Eli foi notificado e nas próximas semanas provavelmente vamos ter um novo pacote estável

https://foss.heptapod.net/python-libs/passlib/-/issues/187

@dunossauro
Copy link
Owner

Caso tenha mais alguma questão em relação a isso, só me notificar. Se não a gente fecha a issue xD

@sksdutra
Copy link
Author

sksdutra commented Apr 7, 2024

Fechado.

@sksdutra sksdutra closed this as completed Apr 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants