opensslにファイルの代わりに文字列を渡すには?

opensslにファイルの代わりに文字列を渡すには?

opensslを使用して複数の文字列を暗号化したいと思います。プレーンテキストで入力ファイルを指定するのではなく、コンソールからopensslにプレーンテキストを渡すにはどうすればよいですか?

opensslのマニュアルページには、次の2つの入力/出力関連オプションがあります。

-in <file>     input file
-out <file>    output file

これまでに試したことは次のとおりです。

これはうまくいきます。

openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt -out encrypted.txt

-outパラメーターを省略すると、コンソールに暗号化された文字列が表示されます。

openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt

ただし、-inと-outを省略するとエラーが発生します。 - Unknown option "encrypt me",

openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 "Encrypt ME"

ベストアンサー1

これを使用してください:

user@host:~$ echo "my string to encrypt" | openssl aes-256-cbc -e -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000
a7svR6j/uAz4kY9jvWbJaUR/d5QdH5ua/vztLN7u/FE=
user@host:~$ echo "a7svR6j/uAz4kY9jvWbJaUR/d5QdH5ua/vztLN7u/FE=" | openssl aes-256-cbc -d -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000
my string to encrypt

または、コマンド置換を使用できます。

user@host:~$ openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv \
00000000000000000000000000000000 -in <(echo "my string to encrypt") -out encrypted.txt

これらのフラグはマニュアルページに文書化されていますman openssl-enc

  • -a:base64 処理データです。つまり、暗号化された場合、データは暗号化後にBase64でエンコードされます。復号化が設定されている場合、入力データは復号化前にBase64にデコードされます。
  • -d:入力データの復号化。
  • -e: 入力データの暗号化
  • -K:実際に使用されるキー:16進数のみで構成される文字列で表現する必要があります。キーのみを指定した場合は、-ivオプションを使用してIVを追加指定する必要があります。キーとパスワードの両方を指定した場合は、-Kオプションで指定したキーを使用し、パスワードで生成されたIVを取得します。鍵とパスワードの両方を指定することはおそらく意味がありません。
  • -iv:使用する実際のIV:16進数のみで構成された文字列として表現する必要があります。 -Kオプションを使用してキーのみを指定する場合は、IVを明示的に定義する必要があります。他のオプションのいずれかを使用してパスワードを指定すると、そのパスワードからIVが生成されます。

おすすめ記事