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