# File p7m contenenti file binario

**URL:** <https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522>\
**Category:** Fatturazione Elettronica\
**Created:** [6 Marzo 2019, 1:50pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522 "2019-03-06T13:50:26Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Simocigni](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/ecb155/32.png) [@Simocigni](https://forum.italia.it/u/Simocigni)\
**Post date:** [6 Marzo 2019, 1:50pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/1 "2019-03-06T13:50:26Z")

</div>

Salve, abbiamo un problema e magari qualcuno di voi conosce la risposta.  
Saltuariamente, ci arrivano file p7m contenenti degli xml in formato binario e non in formato testo.  
l’errore durante l’encript (con openssl) è:  
Error reading S/MIME message  
580:error:0D0680A8:asn1 encoding routines:ASN1\_CHECK\_TLEN:wrong tag:tasn\_dec.c:1199:  
580:error:0D07803A:asn1 encoding routines:ASN1\_ITEM\_EX\_D2I:nested asn1 error:tasn\_dec.c:374:Type=PKCS7

Ho visto sul forum che da un errore simile anche quando si tratta di file base64 ma non credo sia questo il problema perché se faccio

openssl base64 -d -in nomefile.p7m

dopo ottengo lo stesso errore.

Aprendo il file p7m con un notepad vedo una stringa di caratteri mentre in quelle che non mi danno problemi vedo i tag del file xml

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [6 Marzo 2019, 4:42pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/2 "2019-03-06T16:42:20Z")

</div>

> [@Simocigni](#):
>
> Aprendo il file p7m con un notepad vedo una stringa di caratteri

Per stringa di caratteri cosa intendi?  
Se ci sono solo lettere, numeri e i caratteri ‘+’, ‘/’ ed eventuali ‘=’ in fondo, allora è base64.

---

<div class="post-metadata">

**Author:** ![Simocigni](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/ecb155/32.png) [@Simocigni](https://forum.italia.it/u/Simocigni)\
**Post date:** [6 Marzo 2019, 5:01pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/3 "2019-03-06T17:01:04Z")

</div>

Sì, è esattamente come dici tu (compresi ‘==’ in fondo) ma se provo a gestirlo come base64 mi da sempre lo stesso errore.  
Cosa sbaglio?

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [6 Marzo 2019, 5:52pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/4 "2019-03-06T17:52:28Z")

</div>

Se provi ad eseguire questo comando, ti dà errore?

> openssl base64 -d -in nomefile.p7m | openssl smime -verify -inform DER -noverify -out nomefile.xml

Se sì, ed esegui solo il primo comando, cosa viene fuori?

> openssl base64 -d -in nomefile.p7m

Se non viene fuori niente e non dà errore, controlla se per caso i dati base64 sono tutti su una riga senza un “a capo” finale. Se è così, prova a modificare il file aggiungendo una riga vuota in fondo e ripeti l’operazione.

---

<div class="post-metadata">

**Author:** ![Simocigni](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/ecb155/32.png) [@Simocigni](https://forum.italia.it/u/Simocigni)\
**Post date:** [7 Marzo 2019, 7:33am UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/5 "2019-03-07T07:33:35Z")

</div>

Se lancio il comando chew mi hai detto ricevo lo stesso errore.  
Incollo l’output:  
C:\Users\Administrator\Desktop\FirmaNonVerificabile\>openssl base64 -d -in IT01360570384\_F000R.xml.p7m | openssl smime -verify -inform DER -noverify -out IT01360570384\_F000R.xml  
Error reading S/MIME message  
5088:error:0D07207B:asn1 encoding routines:ASN1\_get\_object:header too long:asn1\_lib.c:157:

Se lancio solamente:  
openssl base64 -d -in IT01360570384\_F000R.xml.p7m

non da errore ma poi ricevo lo stesso errore

Se provo a aggiungere un accapo alla fine ricevo un errore in più, vedi sotto:

C:\Users\Administrator\Desktop\FirmaNonVerificabile\>openssl base64 -d -in IT01360570384\_F000R.xml.p7m | openssl smime -verify -inform DER -noverify -out IT01360570384\_F000R.xml  
Error reading S/MIME message  
2592:error:0D0680A8:asn1 encoding routines:ASN1\_CHECK\_TLEN:wrong tag:tasn\_dec.c:1199:  
2592:error:0D08403A:asn1 encoding routines:ASN1\_TEMPLATE\_EX\_D2I:nested asn1 error:tasn\_dec.c:550:Field=d.other, Type=PKCS7

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [7 Marzo 2019, 11:14am UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/6 "2019-03-07T11:14:00Z")

</div>

Ma quando hai eseguito `openssl base64 -d -in IT01360570384_F000R.xml.p7m` sul file originale, non ti ha stampato niente a video?

Prova ad eseguire il comando:  
`openssl base64 -d -in IT01360570384_F000R.xml.p7m -out test.p7m`  
con il file dove hai aggiunto un a capo in fondo e dai un’occhiata al file test.p7m così generato. Cosa vedi dentro?

---

<div class="post-metadata">

**Author:** ![Simocigni](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/ecb155/32.png) [@Simocigni](https://forum.italia.it/u/Simocigni)\
**Post date:** [7 Marzo 2019, 11:37am UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/7 "2019-03-07T11:37:22Z")

</div>

Ho fato come dici, non da errore e se apro test.p7m con un notepad adesso vedo un file con dei geroglifici strani (??). Il file è diventato solo 1 Kb.  
Se provo a decriptarlo con openssl ottengo lo stesso errore di prima

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [7 Marzo 2019, 2:39pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/8 "2019-03-07T14:39:50Z")

</div>

Hmm… non saprei. Dovrei vedere il file originale per saperti dire qualcosa.  
Se riesci a farmelo vedere, posso darci un’occhiata (eventualmente mandami un link in un messaggio privato).

---

<div class="post-metadata">

**Author:** ![genesi](https://forum.italia.it/letter_avatar_proxy/v4/letter/g/53a042/32.png) [@genesi](https://forum.italia.it/u/genesi)\
**Post date:** [7 Marzo 2019, 3:10pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/9 "2019-03-07T15:10:14Z")

</div>

Scusa ma non mi è chiara una cosa.  
dici che nel p7m ci sono file xml in binario, quindi vuol dire che estrai i file xml dalla firma. A che pro, quindi fare openssl base64 -d -in nomefile.p7m?  
Intendi che è direttamente il file p7m ad essere binario? Se fosse così, scusa la domanda banale, hai provato ad aprirlo direttamente con il dike e vedere se lo legge?

---

<div class="post-metadata">

**Author:** ![Simocigni](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/ecb155/32.png) [@Simocigni](https://forum.italia.it/u/Simocigni)\
**Post date:** [7 Marzo 2019, 3:26pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/10 "2019-03-07T15:26:43Z")

</div>

Utilizzando file protector e si aprono benissimo. Da openssl ricevo errore

---

<div class="post-metadata">

**Author:** ![genesi](https://forum.italia.it/letter_avatar_proxy/v4/letter/g/53a042/32.png) [@genesi](https://forum.italia.it/u/genesi)\
**Post date:** [7 Marzo 2019, 3:36pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/11 "2019-03-07T15:36:50Z")

</div>

ok allora è il metodo di decodifica di openSSL. A me faceva ESATTAMENTE la stessa cosa (anche l’errore identico: wrong tag), ed anche a me random. Alla fine, esasperato, sviluppando in C#, ho utilizzato direttamente le librerie interne ed ho risolto (grazie proprio all’aiuto avuto su questo forum).

---

<div class="post-metadata">

**Author:** ![Romolo\_Manfredini](https://forum.italia.it/user_avatar/forum.italia.it/romolo_manfredini/32/1934_2.png) [@Romolo\_Manfredini](https://forum.italia.it/u/Romolo_Manfredini)\
**Post date:** [8 Marzo 2019, 10:24am UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/12 "2019-03-08T10:24:03Z")

</div>

Su oltre 200.000 fatture ricevute non ho mai avuto problemi con openssl.  
Il problema spesso è nella decodifica base64 a seconda della piattaforma utilizzata i terminatori di riga cambiano e sembrano dare noia sia a base64 -d sotto unix sia a openssl base64 -d  
Sarebbe interessante vedere quel file…

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [8 Marzo 2019, 2:03pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/13 "2019-03-08T14:03:56Z")

</div>

Quello che ho notato io sotto Linux è:

- Il comando `base64` si aspetta terminatori di riga Unix (LF) e non tollera i caratteri CR. I dati base64 possono stare su un’unica riga senza terminatore di riga.
- Il comando `openssl base64` funziona sia con terminatori Unix che Windows, ma se i dati stanno su una sola riga, questa deve essere terminata. Curiosamente, se i dati base64 sono su più righe, l’ultima può anche non essere terminata.

Visto che le librerie standard di quasi tutti i linguaggi hanno già la funzione per la decodifica base64, io la farei da codice, prima di passare il risultato ad openssl per la sola decodifica cms/smime. Oppure, una volta stabilito che si tratta di dati base64, si possono elaborare per portarli in una forma che si è sicuri che venga accettata dal programma esterno usato.

---

<div class="post-metadata">

**Author:** ![Simocigni](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/ecb155/32.png) [@Simocigni](https://forum.italia.it/u/Simocigni)\
**Post date:** [12 Marzo 2019, 11:08am UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/14 "2019-03-12T11:08:23Z")

</div>

Comunque se qualcuno vuole un esempio di file per vedere come è fatto per me non ci sono problemi

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [12 Marzo 2019, 6:34pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/15 "2019-03-12T18:34:42Z")

</div>

Ti avevo mandato un PM con il mio indirizzo email, se vuoi mandami un esempio e ci do un’occhiata.

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [14 Marzo 2019, 12:11pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/16 "2019-03-14T12:11:19Z")

</div>

Allora, ho dato un’occhiata al file che mi ha mandato @Simocigni e ho constatato che si tratta di un problema con `openssl base64`.  
Prima avevo scritto:

> [@vbato](#):
>
> Il comando `openssl base64` funziona sia con terminatori Unix che Windows, ma se i dati stanno su una sola riga, questa deve essere terminata.

Purtroppo non mi ero accorto che se la riga è troppo lunga, l’output non contiene tutto il file ma solo l’ultima porzione. La lunghezza varia, su una fattura ho ottenuto 74 byte su 552266, su un’altra 520 su 5896, ma non so il nesso.

Se invece si spezzano i dati base64 su più righe (da 70 caratteri per esempio), openssl funziona.

`openssl base64` ha anche l’opzione -A, che si aspetta i dati base64 su una singola riga, ma in questo caso fallisce se i dati sono su più righe.

La conclusione è che non c’è un comando (né `base64`, né `openssl base64`) che sia in grado di decodificare tutti i possibili file (riga singola, righe multiple con separatori unix, righe multiple con separatori windows). Bisogna per forza di cose preprocessare il file per renderlo “digeribile” dal comando usato, oppure verificare se è su una singola riga e usare l’opzione apposita con openssl.

---

<div class="post-metadata">

**Author:** ![Romolo\_Manfredini](https://forum.italia.it/user_avatar/forum.italia.it/romolo_manfredini/32/1934_2.png) [@Romolo\_Manfredini](https://forum.italia.it/u/Romolo_Manfredini)\
**Post date:** [14 Marzo 2019, 1:44pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/17 "2019-03-14T13:44:11Z")

</div>

Io ho visto che usando sed o tr per rimuovere i CR passando poi l’output a base64 -d non ho mai eccezioni dato che se il CR non c’è sed non lo sostituisce…  
E’ vero che magari nel 50% dei casi sto facendo un lavoro inutile ma visti i tempi di sed nell’elaborare un file perderei più tempo a capire se quello è un file dos oppure no…

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [14 Marzo 2019, 1:59pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/18 "2019-03-14T13:59:46Z")

</div>

> [@Romolo\_Manfredini](#):
>
> Io ho visto che usando sed o tr per rimuovere i CR

Avendo a disposizione tutti i tool Unix, non è difficile portare i file nella forma voluta, ma @Simocigni lavora in windows dove i comandi sed e tr non ci sono (e nemmeno base64).  
Volendo ci sono delle versioni dei tool Unix per windows compilate nativamente (senza doversi portare dietro tutto cygwin).

---

<div class="post-metadata">

**Author:** ![Romolo\_Manfredini](https://forum.italia.it/user_avatar/forum.italia.it/romolo_manfredini/32/1934_2.png) [@Romolo\_Manfredini](https://forum.italia.it/u/Romolo_Manfredini)\
**Post date:** [14 Marzo 2019, 4:00pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/19 "2019-03-14T16:00:37Z")

</div>

su windows effettivamente tanti tools da command line mancano, ma esistono come componenti in .net  
Se dovessi usare windows probabilmente non userei neanche openssl ma direttamente le classi .net  
Per fortuna posso usare linux 🙂

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [14 Marzo 2019, 4:28pm UTC](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522/20 "2019-03-14T16:28:08Z")

</div>

Noi infatti abbiamo implementato tutto in .NET (anche se lo facciamo girare sotto Linux).

Però vedo sul forum che c’è più di qualcuno che usa PHP sotto Windows, quindi è difficile da fare sia direttamente in PHP che passando il tutto ad un comando esterno. La decodifica base64 però la si può fare facilmente in PHP.

[Pagina seguente](https://forum.italia.it/t/file-p7m-contenenti-file-binario/8522.md?page=2)
