Labs SD > Criptografia

Representação de dados binários em texto


Representação de dados binários em texto

Introdução

A entrada e saída dos algoritmos criptográficos são vectores de octetos (byte[]).

Muitas vezes é necessário representar conteúdos cifrados em ficheiros de texto, como acontece com documentos XML, por exemplo. Neste caso, a representação de dados não pode ser directa, porque existem muitos octetos que não correspondem a caracteres válidos.

Sendo assim, uma solução possível é usar codificação de base 64.

 

Base 64

A codificação de base 64 foi definida originalmente para anexos do correio electrónico: RFC 2045: "Multipurpose Internet Mail Extensions".

A codificação de base 64 usa o sub-conjunto de 65 caracteres do US-ASCII que são os caracteres mais "universais", ou seja, caracteres que são iguais em practicamente todos os códigos: A-Z, a-z, 0-9, +, / = pad.

24 bits são representados em 4 caracteres
6 bits úteis por caracter
Aumenta tamanho do conteúdo em 33%, por causa dos 2 bits "desperdiçados".

O objecto javax.xml.bind.DatatypeConverter disponível na plataforma Java desde a versão 6 permite efectuar a conversão:

// import helper methods to print byte[]
import static javax.xml.bind.DatatypeConverter.parseBase64Binary;
import static javax.xml.bind.DatatypeConverter.printBase64Binary;

...

    // encoding binary data with base 64
    System.out.println("Encoding to Base64 ...");
    String result = printBase64Binary(cipherBytes);

...

    // decoding string in base 64
    System.out.println("Decoding from Base64 ...");
    byte[] result = parseBase64Binary(cipherText);


© Docentes de Sistemas Distribuídos, DEI, IST, UTL