パイプラインでopenssl暗号化ルーチンの出力をどのように使用しますか?

パイプラインでopenssl暗号化ルーチンの出力をどのように使用しますか?

openssl マニュアルでは、デフォルトでopenssl enc標準出力が使用されていると記載されています。

ただし、ファイルを復号化すると、標準出力に問題があります。出力を任意のアプリケーション(grepなど)にパイプすると、opensslエラーが発生します。

error writing output file

解決策はありますか?

答え1

このエラーメッセージは、パイプの読み込み終了が閉じられ、opensslがパイプに書き込めなくなったことを意味します。たとえば、入力をすべて読み取らずにすばやく終了するコマンドにパイプを接続すると、これが発生します。

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

通常、何も見つからない単純なgrepが機能します。

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

しかし、grepが一致し、入力ファイルがバイナリゴミの塊であることがわかった場合、読み取りが停止し、パイプが破損します。

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

(この場合はエラーを防ぐために使用できますgrep -a)。

また、grep出力をポケットベルにパイプする場合(例:少ない、終了少ないこれにより、すべての結果が表示される前にgrepのパイプ出力が破損し、書き込んだ内容があればgrepが終了し、opensslパイプも破損します。

関連情報