0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenSSLのdgstにMsgを渡す方法雑まとめ

Posted at

OpenSSLのdgstにMsgを渡す方法雑まとめ

Pythonのcommunicate() をシェルスクリプトへ置き換える

Python の subprocess.Popen(...).communicate() を使って、
OpenSSL dgst コマンドへメッセージ(Msg)を標準入力で渡していた処理をシェルスクリプト(.sh)でどう置き換えるか?

📚 目次


📌 結論:3つの方法で置き換え可能

Python の communicate() をシェルに置き換えるとき、Msg の渡し方はこの3種類です:

  1. パイプで標準入力に流し込む(最も一般的)
  2. 署名(-sign)でも同じようにパイプで OK
  3. Msg を一時ファイルに書いて渡す(再現性が高い)

1. パイプで標準入力を渡す(最も簡単 & communicate() と等価)

Python の communicate() で入力していた内容を、そのまま echoパイプopenssl に置き換えます。

echo -n "$MSG" | openssl dgst -sha256

-n は末尾に改行を入れないために付けます。

Python でのやり方は以下

p = subprocess.Popen(["openssl", "dgst", "-sha256"],
                     stdin=subprocess.PIPE,
                     stdout=subprocess.PIPE)
out = p.communicate(b"Hello")[0]

シェルだとこう

echo -n "Hello" | openssl dgst -sha256

動作は完全に同じです。


2. 署名(-sign)でも同様にパイプで Msg を渡す

RSA や ECDSA 署名などで秘密鍵を使う場合でも、
Python → Shell の置き換えは同じくパイプ方式でできます。

echo -n "$MSG" | openssl dgst -sha256 -sign private.key -out sig.bin

OpenSSL は標準入力を素直に受け取ってくれるので、
communicate() の置き換えは自然に動作します。


3. 一時ファイルを使う方法(ログや再現性を重視する場合)

大量処理やバッチ処理の場合、Msg をファイルに保存して渡すのが便利です。

echo -n "$MSG" > message.txt
openssl dgst -sha256 message.txt

署名する場合:

openssl dgst -sha256 -sign private.key -out sig.bin message.txt

ログを残したい場合はこの方法がベストです。


📊 方法比較表

方法 特徴 再現性 Python communicate() との近さ
① パイプ入力(echo openssl) 最も簡単で直感的 ⭐⭐⭐⭐⭐
② 署名でもパイプでOK 通常の Msg と同じ操作 ⭐⭐⭐⭐⭐
③ 一時ファイルに書く ログ管理・デバッグ向け ⭐⭐⭐⭐

🧭 まとめ

Python の communicate() で行っていた入力処理は、
シェルスクリプトでは次の 1 行で置き換え可能です:

echo -n "$MSG" | openssl dgst -sha256

署名でも同じ要領で使えるため、
OpenSSL を使ったスクリプト処理を Python から Shell に移行する際にとても便利。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?