O problema ocorre porque a opera��o:
 
    int digit = digit1 ^ digit2;
 
pode retornar um valor maior que a base MAX_RADIX (36).
 
Para que a fun��o
 
    Character.forDigit( digit ,Character.MAX_RADIX )
 
retorne um caracter corretamente, o par�metro digit deve estar dentro da faixa 0 <= digit <= MAX_RADIX,
caso contr�rio a fun��o retorna um caracter nulo.
 
Para a base 36 a fun��o Character.forDigit retorna os valores: 0-9 para d�gitos e 'a'-'z', sendo 'z' = 35.
 
Sugiro duas solu��es:
1. Se uso de caracteres ASCII no seu programa n�o for um problema, ao inv�s de usar a classe Character,
    fazer somente casts (vide abaixo).
2. Usar a API de criptografia JCE.
 
public class Crypt2
{
 static void print(String msg)
 {
  System.out.print(msg);
 }
 
 public static void main(String[] args)
 {
  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 = (int)ch;
   int digit2 = (int)k;
   int digit = digit1 ^ digit2;
   senhaCriptografada.append( (char)digit );
   
  }
  
  print("Senha original         : " + senha + "\n");
  print("Senha criptografada    : " + senhaCriptografada.toString() + "\n");
  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 = (int)ch;
   int digit2 = (int)k;
   int digit = digit1 ^ digit2;
   senhaCriptografada.append( (char)digit );
  }
  print("Senha descriptografada : " + senhaCriptografada.toString() + "\n");
 }
}
 
[  ] 's
 
Luiz
-----Original Message-----
From: Lu�s Fernando Chaim [mailto:[EMAIL PROTECTED]]
Sent: Monday, July 02, 2001 3:34 PM
To: [EMAIL PROTECTED]
Subject: [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() );
 
 

Responder a