O algoritmo MessageDigest SHA1 do Java retorna um resultado diferente da função SHA1 do php
Tenho uma tabela SQL com nomes de usuário e senhas. As senhas são codificadas usando o método digest () da MessageDigest. Se eu codificar uma senha - digamos "abcdef12" - com o método digest () do MessageDigest e depois convertê-la em valores hexadecimais, a String será diferente do que se eu fizer o mesmo usando o método SHA1 do PHP. Eu esperaria que esses valores fossem exatamente os mesmo
Code usado para codificar as senhas:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passbyte;
passbyte = "abcdef12".getBytes("UTF-8");
passbyte = md.digest(passbyte);
A conversão da String em hexadecimal é feita usando este método:
public static String convertStringToHex(String str) {
char[] chars = str.toCharArray();
StringBuffer hex = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
hex.append(Integer.toHexString((int) chars[i]));
}
return hex.toString();
}
Senha: abcdef12
Aqui está a senha retornada por muitos geradores on-line de hash SHA1 e PHP SHA1 () - função: d253e3bd69ce1e7ce6074345fd5faa1a3c2e89ef
Aqui está a senha codificada pelo MessageDigest: d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef
Estou esquecendo algo?
Igor.
Edit: Encontrei alguém com um problema semelhante: C # SHA-1 vs. PHP SHA-1 ... Resultados diferentes?. A solução foi alterar codificações .. mas não posso alterar codificações no lado do servidor, pois as senhas nessa tabela SQL não são criadas pelo meu aplicativo. Uso a codificação SHA1 do lado do cliente usando uma classe JavaScript SHA1 (mais precisamente: uma classe Google Web Toolkit). Funciona e codifica a string conforme o esperado, mas aparentemente usando caracteres ASCII? ..