Luiz, nunca trabalhei com digitos, portanto modifiquei um pouco seu c�digo
para fazer alguns testes. Saber por exemplo o bin�rio que ele retorna, saber
se o caracter � um digito. O que est� parecendo � que o XOR utilizado est�
resultando em algo n�o dentro do intervalo de d�gitos permitidos. Rode este
c�digo mais ou menos assim "java Cripto axb chave", ou seja, utilizando
esses dois argumentos(senha e chave) e tire suas conclus�es.

import java.lang.Character;
import java.lang.StringBuffer;
import java.lang.Integer;

public class Cripto {

    public static void main(String[] args) {

        String senha = args[0];
        String key   = args[1];

        System.out.println("\nsenha inicial = " + senha + "\n");
        String senhaCripto = doCripto(senha, key);
        System.out.println("\nsenha cripto = " + senhaCripto + "\n");
        String senhaDescripto = doCripto(senhaCripto, key);
        System.out.println("\nsenha descripto = " + senhaDescripto + "\n");

    }

    private static String doCripto(String senha, String key) {

        StringBuffer senhaCriptografada = new StringBuffer();
        for (int i=0,j=0; i < senha.length(); i++,j++) {

            if ( j == key.length() ) {
                j = 0;
            }

            char ch = senha.charAt(i);
            char k = key.charAt(j);

            int digit1 = Character.digit(ch , Character.MAX_RADIX);
            int digit2 = Character.digit(k  , Character.MAX_RADIX);
            int digit = digit1 ^ digit2;

            System.out.println(
                    "\nch = " +
                    ch +
                    " digit1 = " +
                    rFormat10(digit1) +
                    rFormat20(digit1) + " " +
                    Character.isDigit(digit1));
            System.out.println(
                    " k = " +
                    k  +
                    " digit2 = " +
                    rFormat10(digit2) +
                    rFormat20(digit2) + " " +
                    Character.isDigit(digit2));
            System.out.println(
                    " r = " +
                    Character.forDigit(digit ,Character.MAX_RADIX) +
                    "  digit = " +
                    rFormat10(digit) +
                    rFormat20(digit) + " " +
                    Character.isDigit(digit));

            senhaCriptografada.append(Character.forDigit(digit
,Character.MAX_RADIX));

        }

        return senhaCriptografada.toString();

    }

    private static String rFormat10(int i) {

        String s = Integer.toString(i);
        int tamanho = s.length();
        for (int j = tamanho; j < 3; j++) {

            s = " " + s;

        }

        return s;

    }

    private static String rFormat20(int i) {

        String s = Integer.toBinaryString(i);
        int tamanho = s.length();
        for (int j = tamanho; j < 40; j++) {

            s = " " + s;

        }

        return s;

    }

}

> ----- Mensagem original -----
> De:           Lu�s Fernando Chaim [SMTP:[EMAIL PROTECTED]]
> Enviada em:           segunda-feira, 2 de julho de 2001 15:34
> Para:         [EMAIL PROTECTED]
> Assunto:              [enterprise-list] Problema com criptografia
> 
> Boa Tarde, 
> 
> Estou elaborando uma classe para criptografar as senhas e estou com o 
> seguinte problema; ap�s a execu��o do c�digo, a senha 
> descriptografada apresenta problema com os caracteres "xyz". 
> 
> Estou enviando o c�digo fonte para avalia��o. 
> 
> Caso algu�m tenha a solu��o, agrade�o desde j�. 
> 
> Lu�s Fernando Chaim 
>   
> 
>             String senha = "xyzvtestedesenha"; 
>             String key = "Chave"; 
> 
>             StringBuffer senhaCriptografada = new StringBuffer(); 
>             for( int i=0,j=0; i < senha.length(); i++,j++ ){ 
>                 if( j == key.length() ) 
>                     j = 0; 
>                 char ch = senha.charAt(i); 
>                 char k = key.charAt(j); 
>                 int digit1 = Character.digit( ch , Character.MAX_RADIX ); 
>                 int digit2 = Character.digit( k , Character.MAX_RADIX ); 
> 
>                 int digit = digit1 ^ digit2; 
>                 senhaCriptografada.append( Character.forDigit( digit
> ,Character.MAX_RADIX ) ); 
>             } 
>             System.out.println( senhaCriptografada.toString() ); 
>             senha = senhaCriptografada.toString(); 
>             senhaCriptografada = new StringBuffer(); 
>             for( int i=0,j=0; i < senha.length(); i++,j++ ){ 
>                 if( j == key.length() ) 
>                     j = 0; 
>                 char ch = senha.charAt(i); 
>                 char k = key.charAt(j); 
>                 int digit1 = Character.digit( ch , Character.MAX_RADIX ); 
>                 int digit2 = Character.digit( k , Character.MAX_RADIX ); 
> 
>                 int digit = digit1 ^ digit2; 
>                 senhaCriptografada.append( Character.forDigit( digit ,
> Character.MAX_RADIX ) ); 
>             } 
>             System.out.println( senhaCriptografada.toString() ); 
>   
>  

------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

Responder a