Como usar saída de rotinas de criptografia openssl em um pipe?

1

O openssl manual afirma que openssl enc usa a saída padrão por padrão.

Mas algo não está certo com a saída padrão ao descriptografar um arquivo. Piping a saída para qualquer aplicação como grep, resulta em erro openssl:

error writing output file

Existe uma solução alternativa?

    
por Howard 14.06.2015 / 15:38

1 resposta

1

A mensagem de erro significa que a extremidade de leitura do tubo foi fechada e o openssl não pode mais gravar no pipe. Isso acontecerá, por exemplo, se você enviar para um comando que termina rapidamente sem ler todas as entradas:

$ dd count=400 if=/dev/urandom | openssl enc | true
error writing output file

Normalmente, um simples grep que não encontra nada funcionará:

$ dd count=400 if=/dev/urandom | openssl enc | grep notgoingtomatch

Mas se o grep coincidir, então percebe que o arquivo de entrada é uma pilha de lixo binário, ele irá parar de ler e o pipe será quebrado:

$ dd count=400 if=/dev/urandom | openssl enc | grep a
error writing output file
Binary file (standard input) matches

(Nesse caso, você pode usar grep -a para evitar o erro).

Além disso, se você enviar a saída do grep para um pager como less , saia menos antes de ver todos os resultados, isso quebrará a saída do pipe do grep e grep irá morrer se tiver mais a escrever, fazendo com que o tubo openssl também quebre.

    
por 14.06.2015 / 16:12