2017-01-25 33 views
0

私の同僚は上記のJavaの実装に問題があります。彼らはすでに何日かを無駄にしていた。Javaに相当する「openssl -dgst -sha512 -sign keyfile -out outfileファイル」

コマンドは何をしますか?ダイジェストを作成し、キーファイルを使用してダイジェストに署名しますか?

ダイジェストの作成手順は次のとおりです。How can I create an SHA512 digest string in Java using bouncy castle? Javaにサインインするにはどうすればよいですか?

-signはどのアルゴリズムを使用していますか?私は使用しているキーに依存していますか? 私のキーファイルはp12形式です。これは正しいです?

答えて

1

鍵の種類とダイジェストアルゴリズムによっては、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

に変換してください
関連する問題