Como fazer hash e descriptografar com MD5 em JavaScript

3 de novembro de 2021 Off Por sudoroot

Neste artigo, discutiremos como você pode usar JavaScript para criar um hash MD5 de uma string, salgá-lo, validá-lo e descriptografá-lo.

JavaScript é uma das principais tecnologias da web. A maioria dos sites usa-o e todos os navegadores modernos oferecem suporte a ele sem a necessidade de plug-ins. Nesta série, estamos discutindo diferentes dicas e truques que o ajudarão no desenvolvimento diário de JavaScript.

Como desenvolvedor de JavaScript, às vezes você precisa converter uma string em um hash MD5. Existem muitas bibliotecas de código aberto que permitem que você faça isso em seus projetos JavaScript. Alguns deles estão disponíveis como pacotes NPM e existem alguns outros que você pode usar como bibliotecas JavaScript autônomas apenas incluindo-as em suas páginas HTML. Neste artigo, exploraremos algumas bibliotecas JavaScript MD5 populares para entender como você pode usá-las em seus projetos.

Também discutiremos como você pode descriptografar um hash MD5 em JavaScript. Embora teoricamente não seja possível descriptografar um hash MD5 na string original, às vezes você pode fazer isso com a ajuda de serviços de pesquisa. Claro, não há garantia de que funcionará em todos os casos. Você só poderá descriptografar palavras que já estão armazenadas nos bancos de dados de pesquisa. No entanto, esses são bancos de dados gigantes que contêm mais de um bilhão de hashes, então há uma forte possibilidade de que contenham as palavras e combinações de símbolos mais comuns.

Como criar um hash MD5 em JavaScript

Nesta seção, exploraremos algumas bibliotecas que permitem criar hashes MD5.

Começaremos com uma das bibliotecas mais populares: blueimp / JavaScript-MD5 . É muito fácil integrar a biblioteca blueimp / JavaScript-MD5 em seus projetos, já que você só precisa incluir o arquivo JavaScript de origem em uma scripttag. Também é compatível com ambientes do lado do servidor, como Node.js. Além disso, ele também suporta carregadores de módulo como RequireJS e webpack, e funciona em todos os principais navegadores da web.

Como ele oferece suporte a Node.js, você pode instalá-lo rapidamente com o NPM, conforme mostrado no snippet a seguir.

1
npm install blueimp-md5

Se não estiver usando o NPM em seus projetos, você pode baixar o arquivo de origem do GitHub .

Para começar a usá-lo em seus projetos, você só precisa incluir o seguinte snippet na <head>seção de suas páginas HTML.

1
<script src="js/md5.min.js"></script>

Depois de incluir o arquivo md5.min.js em seus projetos, você está pronto para usar os recursos fornecidos por esta biblioteca! Vamos examinar o exemplo a seguir para ver como você pode usá-lo para criar hashes MD5.

1
2
3
4
5
6
7
<script type="text/javascript" src="md5.min.js"></script>
<script>
window.addEventListener('load', function() {
    var strHash = md5('tutsplus');
    alert('The MD5 hash of the tutsplus string is:' + strHash);
});
</script>

Como você pode ver, é bastante simples de usar. A biblioteca blueimp / JavaScript-MD5 fornece a md5função, que você pode usar para gerar hashes MD5.

A seguir, veremos outra biblioteca, que também é uma maneira rápida de gerar hashes MD5. Você pode baixá-lo do site dos criadores . Depois de baixá-lo, você pode usá-lo conforme mostrado no seguinte trecho.

1
2
3
4
5
6
7
<script type="text/javascript" src="md5.js"></script>
<script>
window.addEventListener('load', function() {
    var strHash = md5('tutsplus');
    alert('The MD5 hash of the tutsplus string is:' + strHash);
});
</script>

Então é assim que gerar hashes MD5 em JavaScript. Na próxima seção, exploraremos como você pode descriptografar hashes MD5 em JavaScript.

Como descriptografar um hash MD5 em JavaScript

Em primeiro lugar, vamos entender que não há maneira nativa em JavaScript de descriptografar hashes MD5. Como o hashing MD5 é um algoritmo unilateral, teoricamente não é possível reverter os hashes MD5. Existem algumas soluções alternativas que você pode usar para quebrar hashes MD5, mas elas não são infalíveis, então não há garantia de que sempre funcionarão.

Uma coisa que às vezes torna possível descriptografar hashes é que o algoritmo MD5 sempre gera o mesmo resultado para uma string. Portanto, se você tiver um banco de dados que contém o mapeamento de todas as palavras populares, poderá usá-lo como um serviço de pesquisa – às vezes chamado de rainbow table – para encontrar a string original do hash MD5. Se a string que criou o hash estiver no banco de dados, você poderá encontrá-la apenas fornecendo o hash.

É por isso que um sistema de login seguro sempre “salgará” as senhas. Isso significa adicionar alguns caracteres extras à string a ser hash – algo como a hora atual em milissegundos ou uma string aleatória de 32 caracteres, por exemplo. Dessa forma, a string terá um elemento imprevisível e não será encontrada na tabela rainbow.  

Como validar um hash MD5 em JavaScript

Se você deseja apenas verificar se um hash é correto para uma string, é fácil. Apenas hash a string com o algoritmo MD5 e veja se ela corresponde ao código hash que você está testando. Se o resultado do algoritmo corresponder ao código hash que você está testando, há uma correspondência e o código hash original é válido. 

Se você estiver validando um hash salgado para um sistema de login, também precisará incluir a string salt. Normalmente, a string salt é armazenada na tabela do banco de dados do sistema de login junto com o nome de usuário e a senha com hash. Dessa forma, você pode combinar facilmente o salt com qualquer senha que o usuário inserir para efetuar login e testar o hash resultante em relação ao encontrado no banco de dados. 

Conclusão

Hoje, discutimos como você pode converter strings em hashes MD5 em JavaScript. Embora seja teoricamente impossível descriptografar hashes MD5, já que o hash é um algoritmo unilateral, discutimos como você pode tentar crackear hashes MD5 com a ajuda de APIs externas.