Tenho um sistema em Delphi que criptografa (ASCII) a senha e quarda no banco de dados, tenho um sistema em J2EE que pega uma senha e criptografa(ASCII) e joga para SQL no where para compara se a senha é valida, ai surge o problema pois nunca é igual.
obs. eu utilizo o mesmo metodo para criptografar e descriptografar no delphi e no java.
var i, j, k, tam: integer;
straux, ret,str: string;
begin
str := Edit1.Text;
tam := length(str);
ret := '';
i := 1;
for k := 1 to tam do
begin
straux := copy(str, i, 6); //pega de 6 em 6 chr's
for j := 1 to length(straux) do
begin
if J = 1 then
ret := ret + Chr(ord(straux[j]) + 60 + k + j) //primeiro caracter
else if J = 2 then
ret := ret + Chr(ord(straux[j]) + 50 + k + j) //segundo caracter
else if J = 3 then
ret := ret + Chr(ord(straux[j]) + 40 + k + j) //terceiro caracter
else if J = 4 then
ret := ret + Chr(ord(straux[j]) + 30 + k + j) //quarto caracter
else if J = 5 then
ret := ret + Chr(ord(straux[j]) + 20 + k + j) //quinto caracter
else if J = 6 then
ret := ret + Chr(ord(straux[j]) + 10 + k + j) //sexto caracter
end;
i := i + 6; //pula de 6 em 6
if i > tam then
begin
edit2.Text := copy(ret, 1, tam); //devolve resultado
exit; //e sai da funcao
end;
end;
Edit2.Text := copy(ret, 1, tam); //devolve resultado
end;
em Java:
int i, j, k, tam;
String straux, ret;
tam = str.length();
ret = "";
i = 0;
for (k = 0; k < tam; k++) {
if (tam < 6) {
straux = String.copyValueOf(str.toCharArray(), i, tam);
} else if (i + 6 > tam) {
straux = String.copyValueOf(str.toCharArray(), i, tam - i);
} else {
straux = String.copyValueOf(str.toCharArray(), i, 6);
}
for (j = 0; j < straux.length(); j++) {
if (j == 0) {
ret += (char) ((int) (straux.toCharArray()[j]) + 60 + (k + 1) + (j + 1));
} else if (j == 1) {
ret += (char) ((int) (straux.toCharArray()[j]) + 50 + (k + 1) + (j + 1));
} else if (j == 2) {
ret += (char) ((int) (straux.toCharArray()[j]) + 40 + (k + 1) + (j + 1));
} else if (j == 3) {
ret += (char) ((int) (straux.toCharArray()[j]) + 30 + (k + 1) + (j + 1));
} else if (j == 4) {
ret += (char) ((int) (straux.toCharArray()[j]) + 20 + (k + 1) + (j + 1));
} else if (j == 5) {
ret += (char) ((int) (straux.toCharArray()[j]) + 10 + (k + 1) + (j + 1));
}
}
i = i + 6;
if (i >= tam) {
break;
}
}
return String.valueOf(ret);
}
Porque não gera o mesmo resultado ?
[color=“red”]Use BBCode em seus códigos - matheus[/color]
Bem, pelo que pude perceber em seu código Java, é que ao informar um valor, ele faz um tratamento e retorna a nova posição, tudo certo até aqui?
Agora o problema, ocorre quando você “altera” o valor correspondente ao caracter original, o ato de cifrar, porque? porque a tabela ASCII padrão é de 0 a 127, esses digitos são reconhecidos, mas de 128 a 255 não, ocasionando que seu código retorne caracteres alterados no final do processo.
O ideial seria você refazer esse seu código, usando array de bytes e informando o Encoding para interpretar o código ASCII usado.
Eu executei o código que você passou no Delphi e também o equivalente no Java. Copiei as strings resultantes e fiz a comparação das mesmas. O resulta do da comparação funciona muito bem com os caracteres com código ASCII abaixo de 128, porém o mesmo não funciona com os caracteres com código entre 127 e 256. (Obs: a tabela é de 0 a 255) :lol:
Expressei-me mal.
Valeu pela retificação Luís. :joia:
Corrigindo então: A tabela padrão ASCII é de 0 a 255 e não como tinha dito anteriormente de 0 a 127, contudo seu padrão usado é sim 0 a 126, sendo 127 a 255 caracteres extendidos.
Só lembrado, windows possui várias versões com línguas diferentes (português, inglês, chinês, etc…) sendo cada um com seu encoding, o mesmo aplica-se ao MS-DOS, ou outros sistemas.
Importante ressaltar que existem alguns padrões internacionais pré estabelecidos para não haver o problema de usar um Encoding para windows e ao chegar no Linux não funcionar, deixando assim de existir a nossa maior vantagem com o Java, a portabilidade (obs.: com relação a caracter).
Em suma, por isso existem várias configurações para teclados… abtn, abnt2, ingles internacional, chinês… :lol: :lol: