Como usar o pv para mostrar o progresso da criptografia / descriptografia openssl?

3

Eu preciso criptografar e poder descriptografar arquivos com openssl , atualmente eu faço isso simplesmente com:

openssl enc -aes-256-cbc -salt -in "$input_filename" -out "$output_filename"

e a descriptografia com:

openssl enc -aes-256-cbc -d -salt -in "$input_filename" -out "$output_filename"

Mas com arquivos grandes, gostaria de ver o progresso.

Eu tentei diferentes variações do seguinte (descriptografia):

pv "$input_filename" | openssl enc -aes-256-cbc -d -salt | pv > "$output_filename"

Mas isso não me pede uma senha. Não tenho certeza de como fazer isso?

EDIT1:

Eu encontrei este tar over openssl :

link

Embora possa ser extremamente útil, não entendo muito.

EDIT2:

Em relação ao pipe nomeado:

Quase funciona. Exceto pelo progresso intermitente , que não posso mostrar obviamente e o resultado final é assim:

enter aes-256-cbc decryption password:
1.25GiB 0:00:16 [75.9MiB/s] [==============================================================================================================================================================================================>] 100%            
1.25GiB 0:00:10 [ 126MiB/s] [                                             <=>                                                                                                                                                                ]
    
por Vlastimil 08.12.2017 / 19:13

2 respostas

4

Você deve tentar

openssl enc -aes-256-cbc -d -salt -in "$input_filename" | pv -W >> "$output_filename"

De Manual :

-W, --wait:

Wait until the first byte has been transferred before showing any progress information or calculating any ETAs. Useful if the program you are piping to or from requires extra information before it starts, eg piping data into gpg(1) or mcrypt(1) which require a passphrase before data can be processed.

qual é exatamente o seu caso. Se você precisar ver a barra de progresso, pelo motivo claramente explicado por Weijun Zhou em um comentário abaixo, você pode inverter a ordem dos comandos no pipe:

pv -W "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"
    
por 08.12.2017 / 20:10
2

Você precisa do canal nomeado aqui.

$ mkfifo mypipe
$ pv < mypipe > "$output_filename"|(pv "$input_filename" | openssl enc -aes-256-cbc -d -salt -out mypipe)

A saída dos dois comandos pv mostrará alternadamente na parte inferior da sua janela tty. Não tenho certeza se é o que você realmente precisa, no entanto. Se você precisar apenas da saída do pv em pv "$input_filename" , modifique o comando acima de acordo.

Espero que isso ajude.

Editar

Depois de obter mais informações do OP, tenho certeza de que

pv "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"

é suficiente para atender às necessidades reais do OP.

    
por 08.12.2017 / 20:04