Pessoal,
estou com um problema ao criptografar senhas, e talvez alguém aqui possa me ajudar. Há alguns anos, desenvolvi um sistema para rodar no Tomcat no Windows que criptografava as senhas da seguinte forma:
MessageDigest md = MessageDigest.getInstance(“SHA”);
byte[] hash = s.getBytes();
hash = md.digest(hash);
String palavra = new String(hash);
Nesta semana, fui solicitado para instalar este mesmo sistema em Linux. Ok, eu pensei, instalei o Linux, o Java e o Tomcat e joguei a aplicação no Tomcat. Mas não consegui logar no sistema, dando mensagem de erro de senha. Debugando, vi que o resultado em ‘palavra’ no código acima era diferente no Linux e no Windows. Pesquisando, descobri que tratava-se de um problema de character enconding.
Charset.defaultCharset().name(), no Windows => “windows-1252”
Charset.defaultCharset().name(), no Linux => “UTF-8”
Mudei o código para:
MessageDigest md = MessageDigest.getInstance(“SHA”);
byte[] hash = s.getBytes(“windows-1252”);
hash = md.digest(hash);
String palavra = new String(hash, “windows-1252”);
No windows, continuou funcionando, mas no Linux continuou não funcionando!!!
O interessante é que se eu mudar para “UTF-8” no código acima, muda o resultado em ‘palavra’ no Windows, que fica igual ao Linux, e para de funcionar.
No linux, tanto faz “windows-1252” ou “UTF-8”, o resultado é o mesmo.
Ou seja, parece que o Linux ignora o nome da codificação que eu passo!!!
Alguém tem alguma idéia?