[]'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++ )
[ ] 'sLuiz
{
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");
}
}-----Original Message-----Boa Tarde,
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
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() );
