2016-11-02 11 views
1

私は最初のP2Pソフトウェアを作成しようとしており、ユーザーを識別するためにデジタル署名を使用します。私はthis tutorial on Oracle.comに続いた。公開鍵を取得する方法だけは述べていますが、秘密鍵を取得する方法は示していません。Javaでデジタル署名の秘密鍵を取得

SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 
keyGen.initialize(1024, random); 
KeyPair pair = keyGen.generateKeyPair(); 
PrivateKey priv = pair.getPrivate(); //It's not possible to print this. 
PublicKey pub = pair.getPublic(); //It's possible to print this. 
+1

私はあなたが何を求めているのか分かりません。 'PrivateKey'と' PublicKey'は同じメソッドを持っています(どちらも 'Key'インターフェースを実装しています)。キーを「印刷する」とはどういう意味ですか?通常は、それらを 'KeyStore'に追加するか、ファイルとしてディスクに書き出します。 –

+0

この問題は 'println'文を提供し、' keyGen'変数が宣言/インスタンス化されていない方が良いでしょう。 –

答えて

0

秘密鍵を安全に保つ必要があります。それを印刷する(そして一般的に文字列に値を格納する)ことは安全ではありません。誤って秘密鍵でtoString()を実行し、ログファイルに秘密鍵を取得したとします。それは確かに良い考えではありません。

限り、あなたはSunRSAプロバイダを使用して(とコンピュータの保護されていないメモリのキーを格納し、他のほとんどのプロバイダ)しているとして、それはあなたがすべての必要がある場合だけRSAPrivateKeyか(にキャスト、しかし値をプリントアウトするのは簡単です値のうちRSAPrivateCrtKeyを取得して、整数を取得してください:

RSAPrivateCrtKey asCrt = (RSAPrivateCrtKey) priv; 
System.out.printf("%s, %d bits%n", asCrt.getAlgorithm(), asCrt.getModulus().bitLength()); 
System.out.printf(" modulus: %d%n", asCrt.getModulus()); 
System.out.printf(" private exponent: %d%n", asCrt.getPrivateExponent()); 
+0

ありがとう!文字列(プライベートキー)をPrivateKey変数に変換することも可能ですか?あなたはJavaセキュリティに関する良い本を知っていますか? –

+0

もちろん。最初に文字列を 'BigInteger'値に解析します。次にRSAのキー仕様に変換し、それらを '' RSA ''' KeyFactory'に入れます。 –

関連する問題