Uma curiosidade sobre o bcrypt que não se fala muito
Publiquei essa história no LinkedIn hoje e achei que seria interessante trazer aqui no tabnews também.
Essa semana navegando pela internet descobri algo sobre o bcrypt que eu não sabia e solucionou uma dúvida que ficou na minha cabeça por bastante tempo.
Tudo começou há alguns meses que nossa QA estava testando uma API e criou uma conta de teste com uma senha de 255 caracteres que era o limite do banco. Funcionou perfeitamente. Mas na hora de fazer login, ela teve a brilhante ideia de digitar os 255 caracteres corretos + mais um monte de caracteres errados no final... e conseguiu logar normalmente.
Ficamos sem entender o que diabos estava acontecendo. Revisamos o código, testamos várias combinações, mas nada fazia sentido. Então limitamos os DTOs de entrada para 255 caracteres tanto no login quanto no register que era o que fazia sentido.
Mas nessa semana, estava assistindo um vídeo no YouTube sobre criptografia a peça que faltava se encaixou, em algum momento o autor do vídeo mencionou brevemente que o bcrypt tem limite de 72 caracteres.
O que me deixou espantado é que o bcrypt não retorna erro quando você passa desse limite. Simplesmente ignora tudo que vem depois do caractere 72. Ou seja, "minhasenha123" + 200 caracteres aleatórios vira só "minhasenha123" na hora do hash.
Imediatamente corrigimos nossos DTOs de validação para limitar senhas a 72 caracteres ao invés de 255 que era o padrão.
Quando contei isso para o pessoal aqui do time, ninguém conhecia essa limitação. Aparentemente é uma daquelas coisas que você só descobre quando tropeça nela e eu nunca iria ter achado esse problema se a QA não tivesse testado essa combinação absurda.
Há anos que utilizo o bcrypt e não sabia dessa limitação. Por isso estou vindo compartilhar. Você já sabia dessa?