Obrigado pela ajuda

[]'s

[EMAIL PROTECTED] wrote:

 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");
 }
}[  ] 'sLuiz

-----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