Dados codificados e decodificados
Para enviar dados por meio de um meio de comunicação, como uma linha telefônica, os dados devem ser serializados, ou seja, convertidos em uma cadeia de caracteres de zeros e que são transmitidos serialmente pela linha. A serialização deve ser feita de forma que o computador que recebe os dados possa converter os dados de volta em seu formato original. A forma como a serialização é realizada é chamada de protocolo de comunicação e é controlada por hardware de transmissão de dados e software. Há vários níveis em que os dados são convertidos. A ilustração a seguir mostra uma exibição bastante simplificada das camadas de protocolo de comunicação.
A ilustração anterior mostra a camada de aplicativo no Computador nº 1 enviando os dados a serem transmitidos (que geralmente consiste em alguma combinação de caracteres textuais e números) para a camada de codificação/decodificação. A camada de codificação/decodificação codifica os dados em um fluxo de bytes do computador. No nível mais baixo, a camada de hardware, o hardware converte os bytes de dados em um fluxo serial de uns e zeros que é transmitido pela linha para o Computador nº 2. A camada de hardware do Computador nº 2 converte os únicos e zeros novamente em bytes do computador e os passa para a camada de codificação/decodificação para decodificação. A camada de codificação/decodificação decodifica os bytes de volta para o formato original e passa os dados para a camada do aplicativo.
Um princípio de design de software aceito é usar a abstração, ou seja, o processo de descrever um problema ou objeto em termos de seus parâmetros gerais em vez de descrever todos os detalhes necessários para resolver o problema ou descrever todos os detalhes de um objeto. Usando a abstração, um designer pode especificar um objeto de software que tenha qualidades específicas sem preocupação de como o objeto é realmente implementado no código de software. Essa prática deixa a implementação aberta. Ele também simplifica a especificação e possibilita declarar axiomas sobre o objeto que podem ser provados quando o objeto é implementado. Esses axiomas podem então ser assumidos quando o objeto é empregado em outro objeto de nível superior. A abstração é a marca registrada da maioria das especificações de software contemporâneas.
A maioria dos protocolos de comunicação envolve uma boa quantidade de abstração. Objetos em camadas mais altas são definidos de forma abstrata e devem ser implementados usando objetos em camadas inferiores. Por exemplo, um serviço em uma camada pode exigir a transferência de determinados objetos abstratos entre computadores. Uma camada de nível inferior pode usar regras de codificação para transformar os objetos abstratos em cadeias de caracteres de um e zeros.
Um método comum de especificação de objetos abstratos destinados a serem transmitidos serialmente é chamado de AsN.1 ( Abstract Syntax Notation One ). O ASN.1 é definido na Recomendação CCITT X.208. Um conjunto de regras ASN.1 para representar objetos como cadeias de caracteres de um e zeros é chamado de DER (Distinguished Encoding Rules) e é definido na Recomendação CCITT X.509, Seção 8.7. Esses são os métodos de codificação usados atualmente pelo CryptoAPI.
Para obter mais informações sobre funções de codificação/decodificação, consulte Funções de codificação e decodificação de objeto.