Dati codificati e decodificati
Per inviare dati su un supporto di comunicazione, ad esempio una riga di telefono, i dati devono essere serializzati, ovvero convertiti in una stringa di uno e zero trasmessi serialmente sulla riga. La serializzazione deve essere eseguita in modo che il computer che riceve i dati possa convertire nuovamente i dati nel formato originale. Come viene eseguita la serializzazione viene chiamato protocollo di comunicazione ed è controllato sia dal software che dall'hardware di trasmissione dati. Esistono diversi livelli in cui i dati vengono convertiti. La figura seguente mostra una visualizzazione notevolmente semplificata dei livelli di protocollo di comunicazione.
La figura precedente mostra il livello applicazione nel computer #1 che invia i dati da trasmettere (che in genere è costituita da una combinazione di caratteri e numeri testuali) al livello codifica/decodifica. Il livello di codifica/decodifica codifica i dati in un flusso di byte del computer. Al livello più basso, il livello hardware converte i byte di dati in un flusso seriale di quelli e zero trasmessi sulla riga al computer #2. Il livello hardware di Computer #2 converte quelli e zero in byte computer e li passa fino al livello di codifica/decodifica per la decodifica. Il livello di codifica/decodifica decodifica i byte nel formato originale e passa i dati fino al livello dell'applicazione.
Un principio di progettazione software accettato consiste nell'usare l'astrazione, ovvero il processo di descrizione di un problema o di un oggetto in termini di parametri generali anziché descrivere tutti i dettagli necessari per risolvere il problema o descrivere tutti i dettagli di un oggetto. Usando l'astrazione, una finestra di progettazione può specificare un oggetto software con qualità specifiche senza preoccuparsi del modo in cui l'oggetto viene effettivamente implementato nel codice software. Tale pratica lascia aperta l'implementazione. Semplifica anche la specifica e consente di stato axioms sull'oggetto che può essere dimostrato quando l'oggetto viene implementato. Questi assiomi possono quindi essere assunti quando l'oggetto viene usato in un altro oggetto di livello superiore. L'astrazione è il segno distintivo delle specifiche software più moderne.
La maggior parte dei protocolli di comunicazione comporta una buona quantità di astrazione. Gli oggetti a livelli superiori sono definiti astrattamente e devono essere implementati usando oggetti a livelli inferiori. Ad esempio, un servizio a un livello potrebbe richiedere il trasferimento di determinati oggetti astratti tra computer. Un livello inferiore può usare regole di codifica per trasformare gli oggetti astratti in stringhe di uno e zero.
Un metodo comune di specificare oggetti astratti da trasmettere serialmente è denominato Notazione sintassi astratta One (ASN.1). ASN.1 è definito nella raccomandazione CCITT X.208. Un set di regole ASN.1 per rappresentare oggetti come stringhe di uno e zero viene chiamato Distinguished Encoding Rules (DER) ed è definito in CCITT Recommendation X.509, Sezione 8.7. Questi sono i metodi di codifica attualmente usati da CryptoAPI.
Per altre informazioni sulle funzioni di codifica/decodifica, vedere Codifica oggetti e decodifica funzioni.