ASCII Pascal x ASCII Java

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.

Obrigado.

eae cara blz?

bom pelo que eu saiba o ASCII segue uma definição internacional
com isso tecnicamente não deveria ter ocorrer erro…

como que tu tah tratando essa informação criptográfica

tipo uma String?

qq coisa se quiser mande ai o código ou qq coisa do genero pra
ficar mais facil de enterde e supor alguma possibilidade de estar
ocorrendo isso… :wink:

[]´s

Funcao em Pascal :

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]

Kra, num sei se vai ajudar muito, mas será q o seu código em Java num ta gerando caracteres Unicode?
:roll:

Tranquilo cara? :joia:

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.

De uma olhadinha neste poste, acredito que ajudará a entender o que eu falei.
:arrow: http://www.portaljava.com.br/home/modules.php?name=Forums&file=viewtopic&p=82424&sid=0ed56290317e6c1e7c454cab87aa8f35#82424

Qualquer dúvida em saber como fazer, só falar. :wink:

Abraço,
Fábio Heleno

Baga,

o Fábio falou tudo. :slight_smile:

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:

Boa Sorte!

Luís

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.

http://geocities.yahoo.com.br/conexaopcpc/artigos/asc.htm

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:

Chega de bla bla bla :razz:

Abraço,
Fábio Heleno