2017-08-12 5 views
2

私はRSA秘密鍵をStringとして格納しており、これをAPIで使用するためにPrivateKeyオブジェクトに変換する必要があります。私は秘密鍵ファイルから文字列への変換の例を見つけることができますが、それ以外の方法はありません。RSA PKCS1秘密鍵文字列をJava PrivateKeyオブジェクトに変換する

私はPrivateKeyのオブジェクトに変換するために管理しますが、それはPKCS8にあった、私はそれがPKCS1する必要があるとき、私はJavaがPKCS1EncodedKeySpec

byte[] key64 = Base64.decodeBase64(privateKeyString.getBytes()); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
KeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes); 
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec); 
+0

PKCS1 RSAPrivateKey(別名OpenSSLの「伝統的な」形式)のbase64(〜PEM、DER)を受け入れる必要があり、それを修正できない場合は、それを修正できません:https://stackoverflow.com/questions/3243018/を参照してください。 how-to-load-rsa-private-key-from-fileまたは私のハックhttps://stackoverflow.com/questions/23709898/java-convert-dkim-private-key-from-rsa-to-for-for暗号化PEMの-javamail(可能性は低いですか?)https://stackoverflow.com/questions/44681737/get-a-privatekey-from-a-rsa-pem-fileまたはhttps://stackoverflow.com/questions/35276820を参照してください。/decrypting-an-openssl-pem-encoded-rsa-private-key-with-java –

+0

あなたの2番目の段落は意味をなさない。 –

答えて

1

を持っていません知っている上でいくつかの混乱があるようですあなたはパートです。 PKCS#1およびPKCS#8暗号規格は、RSA秘密鍵をバイナリで表すためのエンコード形式を実際に定義しています。 PKCS#8は特にこのために設計されています。秘密鍵そのものの上に追加のメタ情報を追加します。たとえば、これが実際にはRSA秘密鍵であることを示すオブジェクト識別子を追加します。

PKCS#1は、プライベート指数、モジュラス、およびより効率的な中国剰余定理(CRT)ベースの演算を実行するために必要な公開指数パラメータなどのプライベートキーのすべてのコンポーネントを直接記述します。 PKCS#8秘密鍵は、実際に秘密鍵のパラメータを格納するためにPKCS#1を使用します。

これで、私は何かもっと説明する必要があります。秘密鍵のバイナリ表現を作成するには、PKCS#8とPKCS#1が必要です。しかし、RSAアルゴリズムで使用されるキー自体はバイナリではありません。それは大きな数で構成されます(例えば、JavaではBigIntegerの値)。したがって、RSA秘密鍵オブジェクトがPKCS#1にある必要があるとは意味がありません。

ストーリーを短くする:基本64でエンコードされたPKCS#8のフォーマット済みキーが、あなたが正しくビジネスを行っていることをデコードした場合。

関連する問題