Existem alguns meios de se trabalhar com criptografia de fluxo neste artigo irei colocar um exemplo da Criptografia de Fluxo RC4 feito em java. Você pode encontrar no Wikipédia uma explicação mais abrangente e detalhada da teoria desta criptografia.
Veja o exemplo completo:
public
class RC4 {
public RC4() {
}
public static void main(String[] args) {
StringBuffer input,key;
input = new StringBuffer("FulanosMigration");
key = new StringBuffer("ABCDEFGHIJKLMNOPQRSTUVXYZ");
Crypt(input,key);
System.out.println("DATA : "+input);
Crypt(input,key);
System.out.println("DATA : "+input);
}
static void Crypt(StringBuffer inp,StringBuffer key)
{
int Sbox[];
int Sbox2[];
Sbox = new int[256];
Sbox2 = new int[256];
int i, j, t, x;
String OurUnSecuredKey = "\0";
char temp , k;
i = 0;
j = 0;
k = 0;
t = 0;
x = 0;
temp = 0;
//inicializa sbox i
for( i = 0; i < 256; i++)
{
Sbox[i] = i;
}
j = 0;
if(key.length() >0)
{
for(i = 0; i < 256 ; i++)
{
if(j == key.length() )
j = 0;
Sbox2[i] = key.charAt(j++);
}
}
else
{
for(i = 0; i < 256 ; i++)
{
if(j == OurUnSecuredKey.length() +1)
j = 0;
Sbox2[i] = OurUnSecuredKey.charAt(j++);
}
}
j = 0 ;
for(i = 0; i < 256; i++)
{
//Troca a posição das letras
j = (j + Sbox[i] + Sbox2[i]) % 256;
temp = (char)Sbox[i];
Sbox[i] = Sbox[j];
Sbox[j] = temp;
}
i = j = 0;
for(x = 0; x < inp.length() ; x++)
{
//incrementa i
i = (i + 1) % 256;
//incrementa j
j = (j + Sbox[i]) % 256;
temp = (char)Sbox[i];
Sbox[i] = Sbox[j] ;
Sbox[j] = temp;
t = ( Sbox[i] + Sbox[j]) % 256 ;
k = (char)Sbox[t];
//xor
inp.setCharAt(x, (char)(inp.charAt(x) ^ k));
}
}
}
Nenhum comentário:
Postar um comentário