Basic Encoding Rules: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Abisys.bot (discussione | contributi)
m ., typos fixed: 0 000 → 0 000 (5)
Errore nella condizione del campo length
Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile
 
(11 versioni intermedie di 9 utenti non mostrate)
Riga 1:
{{W|informatica|ottobre 2023}}
'''Basic Encoding Rules''' (abbreviazione '''BER''') è un sistema di codifica composto da una serie di regole per la conversione di dati eterogenei in flussi di [[byte]].
 
'''Basic Encoding Rules''' (abbreviazione '''BER''') è un sistema di [[Codice (teoria dell'informazione)|codifica]] composto da una serie di regole per la conversione di dati eterogenei in flussi di [[byte]].
 
La codifica BER è strettamente legata allo standard [[ASN.1]] ed è utilizzata per le comunicazioni [[Simple Network Management Protocol|SNMP]] e [[Lightweight Directory Access Protocol|LDAP]].
Riga 11 ⟶ 13:
Quindi ad esempio per codificare il dato 7 come INTERO occorreranno 3 bytes:
*il primo che indica il ''Type'' (INTERO = 02₁₆);
*il terzo è la codifica del dato INTERO secondo le regole BER (in questo caso 07₁₆);
*il secondo che indica la ''Length'' di v (in questo caso = 01₁₆).
*il terzo è la codifica del dato INTERO secondo le regole BER (in questo caso 07₁₆);
 
In definitiva INTEGER 7 in BER diviene 020107₁₆ dove si distinguono chiaramente T,L e V.
Riga 20 ⟶ 22:
Come si può immaginare la codifica di V dipende dal tipo T.
Ci sono alcuni tipi predefiniti in ASN.1 (si dice che sono ''Tag appartenenti alla Class UNIVERSAL'').
Per maggiori informazioni a tal proposito consultare [https://web.archive.org/web/20081205052919/http://www.oss.com/asn1/booksintro.html OSS Nokalva - Books Overview].
 
== Codifica BER ==
Riga 64 ⟶ 66:
==== Altri byte di T ====
Per codificare gli altri byte si procede nel seguente modo:
#si converte l’l{{'}}''ID'' in binario
#si aggiunge un '''1''' ogni 7 bit
#si completa il byte con un 10 in testa
 
NB !!! da correggereappena corretto!!! l'ultimo byte che compone l'ID viene composto con uno '0' in testa, proprio per indicare che l'ID finisce con quel byte.
 
[[File:Altribytes T.JPG|thumb|upright=2.3|center|Altri bytes di T]]
Riga 74 ⟶ 76:
Ad es. se ID = 250 in base 10, allora:
#<math>250_{10} = FA_{16} = 11111010_2</math>
#<math>11111010 -> 1 '''\textbf{1'''}1111010</math>
#<math>1 '''\textbf{1'''}1111010 -> '''\textbf{1'''}0000001 '''1'''~\textbf{0}1111010</math>
 
In definitiva ID = 250 viene codificato con <math>81FA_{16}</math>
Riga 113 ⟶ 115:
==== Encoding di L 'definite length' ====
In questo tipo di encoding si distinguono 2 casi distinti:
#se <math>Len(V)<=127</math> allora ''L'' viene codificato in 1 byte (''short definite form'')
#se <math>Len(V)>=127</math> allora ''L'' viene codificato in più byte (''long definite form'')
 
===== Caso 1: ''L'' in 1 byte - ''short definite form'' =====
Riga 121 ⟶ 123:
Il limite di 127 byte è dato dal fatto che 127 è 7F in esadecimale (01111111 in binario) e quindi il primo bit di ''L'' è sicuramente zero.
 
Ciò è utile in fase di Decoding, infatti se il primo bit è zero, significa che è stata usata la codifica di L su un solo byte.
[[File:Short Defined Form L.JPG|thumb|center|L in Short Defined Form]]
 
Riga 166 ⟶ 168:
 
=== Codifica di V ===
La codifica di ''V'', come è stato più volte detto, dipende dal tipo ''T'' e dalla sua definizione tramite sintassi [[ASN.1]] In questa sede sarà illustrata la codifica dei 3 tipi principali: INTEGER, OCTECT STRING e OBJECT ID. Per una panoramica completa di codifica decodifica si rimanda ancora a [https://web.archive.org/web/20081205052919/http://www.oss.com/asn1/booksintro.html OSS Nokalva - Books Overview] o [https://web.archive.org/web/20081205052919/http://www.oss.com/asn1/booksintro.html OSS Nokalva - Books Overview]
 
==== Codifica di ''INTEGER'' ====
Riga 188 ⟶ 190:
* <math>\left |valore \right | =\left |-100 \right | = 100_{10} = 01100100_2</math> <small>(vedi es. INTEGER Positivi)</small>
* complemento a 1: <math>01100100_2 -> 10011011_2</math>
* aggiungere <math>+ 1_2</math>. Si ottineottiene <math>10011011_2 + 1_2 = 10011100_2</math>
Quindi <math>valore = -100 \to V = 10011100_2 = 9C_{16} </math>
 
Riga 226 ⟶ 228:
* [[Simple Network Management Protocol]]
* [[Lightweight Directory Access Protocol]]
 
== Altri progetti ==
{{interprogetto}}
 
== Collegamenti esterni ==
#* {{en}} [https://web.archive.org/web/20081205052919/http://www.oss.com/asn1/booksintro.html Olivier Dubuisson - ASN.1: Communication Between Heterogeneous Systems] - Free PDF book
#* {{en}} [https://web.archive.org/web/20081205052919/http://www.oss.com/asn1/booksintro.html Professor John Larmouth - ASN.1 Complete] - Free PDF book
 
{{Portale|Informatica}}