Utilizzo di OpenSSL per crittografare / decodificare un file?

1

Sto testando OpenSSL eseguendo i test di Risposta Conosciuta forniti qui .

Quando si utilizza AES-128-CBC con i seguenti parametri:

KEY = 00000000000000000000000000000000
IV = 00000000000000000000000000000000
Input = f34481ec3cc627bacd5dc3fb08f273e6

l'output dovrebbe essere il seguente: 0336763e966d92595a567cc9ce537f5e

Ho eseguito il seguente comando nel mio terminale:

openssl aes-128-cbc -e -in in.txt -out out.txt -K  00000000000000000000000000000000 -iv 00000000000000000000000000000000 -p -nosalt

dove il file in.txt contiene il mio input, ottengo un file di output con parole senza senso. Sono assumendo che viene crittografato correttamente perché quando decrittore lo stesso file con gli stessi parametri, ottengo il mio input.

Ho anche provato uno strumento online per verificare il risultato fornito nel documento online extranet.cryptomathic.com che fornisce anche l'output corretto.

Come posso visualizzare l'output nel formato fornito nel documento AESAVS? Il metodo che ho applicato per crittografare il file di testo in chiaro è corretto o mi manca qualcosa qui?

    
posta Hussain Ali Akbar 02.01.2018 - 08:08
fonte

1 risposta

1

I file di input e di output dovrebbero contenere i dati binari mentre gli argomenti IV e KEY dovrebbero essere dati esadecimali. Ma probabilmente hai messo i dati esadecimali ( f34481ec3cc627bacd5dc3fb08f273e6 ) nel file di input e quindi hai creato un file di input costituito da 32 caratteri ASCII invece di 16 byte (binari).

Se fatto correttamente, funziona.
Prima decodifica la stringa esadecimale in binario, cioè esadecimale a 32 byte in dati binari a 16 byte:

$ perl -e 'print pack(q[H*],q[f34481ec3cc627bacd5dc3fb08f273e6])'  > in.txt

Quindi esegui la crittografia. Nota che ho anche usato l'opzione -nopad nella crittografia perché altrimenti openssl aggiunge un ulteriore blocco vuoto di 16 byte per riempire l'input fino al prossimo limite di 16 byte.

$ openssl aes-128-cbc -nopad -e -in in.txt -out out.txt \
  -K  00000000000000000000000000000000 -iv 00000000000000000000000000000000 -p -nosalt

E infine codifica l'output binario (16 byte) in una stringa esadecimale in modo da poterlo confrontare con il risultato previsto:

$ perl -e 'local $/; print unpack(q[H*],<>),"\n"' < out.txt
0336763e966d92595a567cc9ce537f5e
    
risposta data 02.01.2018 - 08:19
fonte

Leggi altre domande sui tag