Porém não estou conseguindo inserir esse valor no meu banco de dados Interbase pq ele diz que pode ser overflow, string sendo truncada ou q não consegue traduzir o valor de algum campo.Das alternativas a unica possivel é a última. Eu acho q é pq ele tá gerando caracteres unicode e o banco n suporta mas é só um palpite e mesmo q seja alguem tem uma dica???
Aí tá o erro do banco:( o campo password já foi aumentado pra 255)
Arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets
Statement: insert into ag_user(user_code,user_id,user_password,user_email)values (4,‘cainsAS’,‘ñ(!»¾¥’‘ê R1ÀYDQ?’,‘asdasd.com.as’)
USER_CODE INTEGER NOT NULL,
USER_ID VARCHAR(255) CHARACTER SET ISO8859_1,
USER_PASSWORD VARCHAR(255) CHARACTER SET ISO8859_1,
USER_EMAIL VARCHAR(255) CHARACTER SET ISO8859_1,
Repita comigo: strings em Java não são arrays de bytes. Repita mais uma vez: strings em java são arrays de caracteres.
Em Java não é possível guardar diretamente um array de bytes em uma String sem danificar o array de bytes, a menos que esse array tenha sido obtido a partir de uma outra String com “getBytes()”.
O que você deve fazer é converter o array de bytes para Base-64 ou hexadecimal (se quiser guardar como uma string), ou então guardar diretamente os bytes no banco (nem sempre é recomendável porque costuma ser muito trabalhoso, e o tratamento é diferente de banco para banco.).
Como o seu array é pequeno (tem exatamente 20 bytes), recomendo usar hexadecimal (vai dar um campo de 40 caracteres, que não é muito grande). Se você usasse Base-64 não ia economizar muito (ia dar 28 caracteres), não sei se faz diferença para você.
Aqui lhe dou uma função para “quebrar o seu galho”.
Para ver se o SHA-1 da senha que o usuário cadastrou bateu com o SHA-1 da senha que o usuário passou, é só converter ambos os SHA-1 para uma string hexadecimal, e bater as strings.
/** 0-9, a-f */
private static final char[] HEX = "0123456789abcdef".toCharArray();
/**
* Converte um array de bytes em uma string hexadecimal.
* @param bytes Os bytes a serem convertidos.
* @return Uma string em hexadecimal
*/
public static String toHex(byte[] bytes) {
char[] ret = new char[bytes.length * 2];
for (int i = 0, j = 0; i < bytes.length; ++i) {
ret[j++] = HEX[(bytes[i] >> 4) & 0x0F];
ret[j++] = HEX[bytes[i] & 0x0F];
}
return String.valueOf(ret);
}
Valeu pessoal, o exemplo foi de grande ajuda e deu pra fazer usando o SHA mesmo era so passar pra hexadecimal os bytes gerados e sim estou pegando os bytes de uma string através do getBytes() sem bronca quanto a isso !