Olá, Isaac! Tudo bem?
Há algumas "possíveis" vulnerabilidades no uso de senhas criptografadas com MD5, mas essas possibilidades são extramente improváveis. Não podemos falar que é impossível, porque, principalmente na segurança da informação, não podemos fazer falsas promessas, mas é extremamente difícil.
O primeiro ponto é, não podemos manter essa senha sendo devolvida ao cliente na API, mesmo criptografada. Isso já dificulta absurdamente qualquer tentativa de engenharia reversa.
Mas, mesmo que alguém tenha acesso e tente fazer a engenharia reversa, é complicado pelo seguinte motivo: o MD5 é um algoritmo de direção única (one-way). Resumidamente, o que acontece é que a maneira que o algoritmo funciona permite que múltiplas entradas (inputs) resultem na mesma saída (output), assim, mesmo que você consiga fazer alguma engenharia reversa, não saberá qual é a resposta correta.
Lógico, isso depende também da qualidade da senha. Você pode ver isso acontecer neste site: MD5 conversion and MD5 reverse lookup.
Se você copiar o seguinte hash: 5f4dcc3b5aa765d61d8327deb882cf99
, e tentar reverter conseguirá descobrir que o reverso é password
. Essa senha é considerada fraca. Agora, se você tentar seu nome: isaacrodrigues
, o site não irá retornar nada.
Isso porque uma das formas de "reverter" o MD5 é ter um dicionário de possíveis senhas e seu hash em MD5. Senhas populares, frágeis, geralmente possuem essa falha, pois seus hashes são facilmente descobertos e conhecidos.
Há ainda a opção de um possível invasor tentar utilizar força bruta para encontrar a senha, e aí entram outras questões, como o tempo que se leva para "quebrar" o algoritmo, principalmente quando utilizamos métodos como o bcrypt, que intencionalmente é um processo mais lento, para tomar ainda mais tempo se usado com engenharia reversa.
Tudo que eu disse, é mais alinhado à sua pergunta, e também serve para o SHA-1.
De toda forma, há outros aspectos da criptografia que podem influenciar na decisão de algoritmo, e os pesquisadores estão constantemente avançando e, por consequência, encontrando aspectos inseguros dos métodos disponíveis. Isso aconteceu com o MD5 e com o SHA-1.
Por isso, hoje, a recomendação é optar por métodos como SHA-256, SHA-3 e bcrypt.
Certo? Espero ter ajudado e bons estudos!