3

現在、ネイティブ OpenSSL バイナリを使用して SHA256 アルゴリズムでバイト文字列に署名するコードがいくつかあります。コードは外部プロセスを呼び出し、パラメーターを送信し、結果を Python コードに戻します。

現在のコードは次のとおりです。

signed_digest_proc = subprocess.Popen(
    ['openssl', 'dgst', '-sha256', '-sign', tmp_path],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE
)
signed_digest_proc.stdin.write(original_string)
signed_digest, _ = signed_digest_proc.communicate()

base64.encodestring(signed_digest).decode().replace('\n', '')

original_string大きすぎると、結果に問題が発生する可能性があります (外部プロセスとの通信によると思います)。そのため、Python のみのソリューションに変更しようとしています。

import hmac, hashlib
h = hmac.new(bytes(key_pem(), 'ASCII'), original_string, hashlib.sha256)
result = base64.encodestring(h).decode().replace('\n', '')

これにより、最初の文字列とはまったく異なる文字列が生成されます。

外部プロセスを呼び出さずに元のコードを実装するにはどうすればよいでしょうか?

4

1 に答える 1