Com o aumento da importância da segurança em aplicações de software, é cada vez mais comum a necessidade de se criptografar e/ou hashar dados sensíveis. Embora possam parecer conceitos semelhantes, há diferenças fundamentais entre o encrypter e o hasher. Neste artigo, vamos explorar essas diferenças e como implementá-las usando Node.js e Typescript.
O que é um Encrypter?
Encrypter é um processo que transforma um texto legível em um texto cifrado, para que possa ser enviado ou armazenado com mais segurança. A criptografia é usada para proteger informações confidenciais, como senhas ou informações financeiras, contra acesso não autorizado.
Existem muitos algoritmos de criptografia disponíveis, e um dos mais populares é o AES (Advanced Encryption Standard). Com o Node.js e o Typescript, podemos usar o pacote ‘crypto’ para implementar a criptografia AES. Aqui está um exemplo:
import * as crypto from 'crypto';
const secretKey = 'chave-secreta-123';
const textToEncrypt = 'texto a ser criptografado';
const cipher = crypto.createCipher('aes-256-cbc', secretKey);
let encryptedText = cipher.update(textToEncrypt, 'utf8', 'hex');
encryptedText += cipher.final('hex');
console.log('Texto criptografado:', encryptedText);
Neste exemplo, estamos usando o algoritmo AES com uma chave secreta de 256 bits (ou seja, 32 caracteres) e o modo de operação CBC (Cipher Block Chaining). O texto legível é criptografado usando a função createCipher()
do pacote ‘crypto’, que retorna uma instância do objeto Cipher. O método update()
é usado para processar o texto a ser criptografado, e o método final()
é usado para finalizar o processo de criptografia e obter o texto cifrado em formato hexadecimal.
O que é um Hasher?
Um hasher, por outro lado, é um processo que transforma um texto legível em um valor de hash, que é uma sequência de caracteres que representa a entrada original de forma não reversível. O valor de hash é geralmente usado para verificar a integridade dos dados, já que qualquer alteração na entrada original resultará em um valor de hash diferente.
Existem muitos algoritmos de hashing disponíveis, e um dos mais populares é o SHA (Secure Hash Algorithm). Com o Node.js e o Typescript, podemos usar o pacote ‘crypto’ para implementar o hashing SHA. Aqui está um exemplo:
import * as crypto from 'crypto';
const textToHash = 'texto a ser hashado';
const hash = crypto.createHash('sha256');
hash.update(textToHash);
const hashedText = hash.digest('hex');
console.log('Valor de hash:', hashedText);
Neste exemplo, estamos usando o algoritmo SHA com 256 bits e a função createHash()
do pacote ‘crypto’, que retorna uma instância do objeto Hash. O método update()
é usado para processar o texto a ser hashado, e o método digest()
é usado para obter o valor de hash em formato hexadecimal.
Diferenças entre Encrypter e Hasher
Embora o Encrypter e o Hasher sejam usados para proteger informações, eles têm finalidades diferentes. O Encrypter transforma um texto legível em um texto cifrado, enquanto o Hasher transforma um texto
legível em um valor de hash irreversível. Além disso, enquanto a criptografia pode ser desfeita usando a chave secreta correta, o hashing não pode ser desfeito, uma vez que o valor de hash não contém informações suficientes para recuperar a entrada original.
Por exemplo, quando armazenamos senhas em um banco de dados, não é seguro armazenar a senha em texto legível. Se um invasor acessar o banco de dados, ele terá acesso a todas as senhas em texto legível, o que pode causar danos significativos. Em vez disso, usamos um hasher para transformar a senha em um valor de hash, que é armazenado no banco de dados. Quando um usuário tenta fazer login, a senha fornecida é hashada e comparada com o valor de hash armazenado no banco de dados. Se os valores de hash coincidirem, a senha está correta e o login é permitido.
Por outro lado, a criptografia é usada para proteger informações confidenciais que precisam ser transmitidas ou armazenadas com segurança. Por exemplo, quando enviamos informações financeiras pela internet, usamos a criptografia para impedir que terceiros não autorizados acessem essas informações. A criptografia garante que apenas o destinatário correto possa acessar as informações, já que somente eles têm a chave secreta necessária para descriptografar o texto cifrado.
Conclusão
anto o Encrypter quanto o Hasher são importantes para a segurança de aplicações de software. Enquanto o Encrypter é usado para proteger informações confidenciais, o Hasher é usado para verificar a integridade dos dados. Com o Node.js e o Typescript, podemos implementar tanto a criptografia quanto o hashing usando o pacote ‘crypto’. É importante entender as diferenças entre esses dois conceitos para escolher o método certo para proteger suas informações.