鍵の種類とダイジェストアルゴリズムによっては、opensslが署名アルゴリズムを決定します。 DGSTが自動的に秘密鍵のASN.1の情報に基づいて署名に使用するアルゴリズム(RSA、ECC、など)を決定します、OpenSSL documentation、
ファイルに署名を参照してください。
Javaで同じ処理を実行するには、PKCS12キーストアのキーをロードして、秘密鍵で署名する必要があります。 Bouncycastleは必要ありません。
//Read private key identified by keyAlias from keystore
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(Files.readAllBytes(Paths.get("keyfile.p12")), password);
PrivateKey key = (PrivateKey)keystore.getKey(keyAlias, password);
//Use SHA512withRSA with RSA keys, SHA512withDSA for DSA keys,...
//See supported algorithm here: https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#Signature
String signatureAlgorithm = "SHA512withRSA";
//Digital Signature
Signature sig = Signature.getInstance(signatureAlgorithm);
sig.initSign(privateKey);
sig.update(Files.readAllBytes(Paths.get(file)));
byte[] signature = sig.sign();
OpenSSLはデフォルトでHEX出力を生成します。 -binary
を使用してバイナリデータを取得するか、またはJava出力をHEX
に変換してください