MD5

128 bits • Rápido mas não seguro para criptografia
O hash aparecerá aqui...

SHA-1

160 bits • Obsoleto para segurança
O hash aparecerá aqui...

SHA-256

256 bits • Padrão atual, muito seguro
O hash aparecerá aqui...

SHA-512

512 bits • Máxima segurança
O hash aparecerá aqui...

📚 O que são Funções Hash?

Uma função hash é um algoritmo que transforma qualquer quantidade de dados em uma sequência de tamanho fixo (chamada "digest" ou "hash"). É uma operação unidirecional: você pode calcular o hash de qualquer dado, mas não pode reverter o hash para obter o dado original.

Duas características essenciais: pequenas mudanças no input causam mudanças drásticas no output ("efeito avalanche"), e é computacionalmente inviável encontrar dois inputs diferentes que produzam o mesmo hash ("resistência a colisões").

🔧 Diferenças entre Algoritmos

MD5 (128 bits) - ⚠️ Não use para segurança

Rápido mas vulnerável a colisões desde 2004. Use apenas para checksums de arquivos não críticos ou identificadores únicos não relacionados à segurança.

SHA-1 (160 bits) - ⚠️ Obsoleto

Colisões práticas demonstradas em 2017. Ainda usado em Git por compatibilidade, mas não recomendado para novos sistemas.

SHA-256 (256 bits) - ✅ Recomendado

Padrão atual para a maioria das aplicações. Usado em Bitcoin, certificados SSL/TLS, e verificação de integridade. Excelente equilíbrio entre segurança e performance.

SHA-512 (512 bits) - ✅ Máxima segurança

Mais seguro e às vezes mais rápido que SHA-256 em sistemas de 64 bits. Ideal para aplicações que exigem máxima segurança e longevidade.

💼 Casos de Uso Comuns

  • Verificação de arquivos: Comparar hash de download com o hash oficial para garantir integridade
  • Armazenamento de senhas: Nunca armazene senhas em texto! Use hash + salt (bcrypt, Argon2)
  • Blockchain: Bitcoin usa SHA-256 para proof-of-work e links entre blocos
  • Assinaturas digitais: Certificados SSL/TLS usam hashes para verificar autenticidade
  • Deduplicação: Identificar arquivos duplicados comparando seus hashes
  • Cache: Usar hash de dados como chave de cache para busca rápida

❓ Perguntas Frequentes

É possível "descriptografar" um hash?

Não! Hash não é criptografia reversível. A única forma é testar milhões de combinações (força bruta) ou usar tabelas de hashes pré-calculados (rainbow tables).

O que é "salt" e por que é importante?

Salt é um valor aleatório adicionado à senha antes do hash. Isso garante que a mesma senha gere hashes diferentes para cada usuário, protegendo contra rainbow tables.

Por que meu hash é diferente de outros sites?

Diferenças na codificação de caracteres (UTF-8 vs ASCII), quebras de linha (LF vs CRLF), ou espaços invisíveis podem causar hashes diferentes. Esta ferramenta usa UTF-8.

📝 Exemplos de Código

Veja como calcular hashes em diferentes linguagens de programação:

💛 JavaScript (Node.js)

const crypto = require('crypto');

const texto = "Olá, mundo!";

// SHA-256 (recomendado)
const sha256 = crypto.createHash('sha256').update(texto).digest('hex');
console.log(sha256);

// MD5 (apenas para checksums)
const md5 = crypto.createHash('md5').update(texto).digest('hex');

// Usando Web Crypto API (navegadores)
async function sha256Browser(texto) {
    const encoder = new TextEncoder();
    const data = encoder.encode(texto);
    const hash = await crypto.subtle.digest('SHA-256', data);
    return Array.from(new Uint8Array(hash))
        .map(b => b.toString(16).padStart(2, '0')).join('');
}

🐍 Python

import hashlib

texto = "Olá, mundo!"

# SHA-256 (recomendado)
sha256 = hashlib.sha256(texto.encode('utf-8')).hexdigest()
print(sha256)

# MD5, SHA-1, SHA-512
md5 = hashlib.md5(texto.encode('utf-8')).hexdigest()
sha1 = hashlib.sha1(texto.encode('utf-8')).hexdigest()
sha512 = hashlib.sha512(texto.encode('utf-8')).hexdigest()

# Hash de arquivo
def hash_arquivo(caminho):
    with open(caminho, 'rb') as f:
        return hashlib.sha256(f.read()).hexdigest()

🟣 C# (.NET)

using System.Security.Cryptography;
using System.Text;

string texto = "Olá, mundo!";
byte[] bytes = Encoding.UTF8.GetBytes(texto);

// SHA-256 (recomendado)
using var sha256 = SHA256.Create();
byte[] hash = sha256.ComputeHash(bytes);
string hashHex = Convert.ToHexString(hash).ToLower();

// Método auxiliar para qualquer algoritmo
string ComputeHash<T>(string input) where T : HashAlgorithm, new()
{
    using var algo = new T();
    byte[] hash = algo.ComputeHash(Encoding.UTF8.GetBytes(input));
    return Convert.ToHexString(hash).ToLower();
}

☕ Java

import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;

String texto = "Olá, mundo!";

// SHA-256 (recomendado)
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(texto.getBytes(StandardCharsets.UTF_8));

// Converter para hexadecimal
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
    hexString.append(String.format("%02x", b));
}
System.out.println(hexString.toString());

🐘 PHP

<?php
$texto = "Olá, mundo!";

// SHA-256 (recomendado)
$sha256 = hash('sha256', $texto);
echo $sha256;

// Outros algoritmos
$md5 = md5($texto);
$sha1 = sha1($texto);
$sha512 = hash('sha512', $texto);

// Hash de arquivo
$hashArquivo = hash_file('sha256', 'arquivo.txt');

// Para senhas, use password_hash (bcrypt)
$senhaHash = password_hash($senha, PASSWORD_DEFAULT);
$valido = password_verify($senha, $senhaHash);
?>