web-dev-qa-db-ja.com

ファイルの暗号化と復号化にJava PKCS#12キーストアからの証明書を使用する方法は?

Java 'PKCS#12`キーストアに格納されている証明書を使用してファイルを暗号化および復号化する方法を誰かが説明できますか?

9
Sasha

Eugene Mayevskiが述べたように、あなたの質問は間違っており、元の形式で答えることはできません。しかし、私はあなたのためにそれを少し明確にしようとします。 PKCS#12 -暗号化形式は証明書と秘密鍵を格納するためのものです。データを暗号化または復号化するときは、暗号化の実装と_PKCS#12_コンテナのcontentを使用します。

Javaには、PKCS#12キーストアでの作業に対する組み込みサポートがあります。このコンテナーでの作業は、標準のJKSキーストアと大差ありません。

たとえば、JKSキーストアをロードするコード

_KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(is, password.toCharArray());
_

pKCS#12キーストアをロードするためのコード

_KeyStore store = KeyStore.getInstance("PKCS12");
store.load(is, password.toCharArray());
_

その後、キーストアコンテンツに無制限にアクセスできます。 Firefoxでのインポート/エクスポートによる奇妙なアクションなしで、キーストアに保存されている証明書とキーを取得できます。

_Key key = store.getKey("alias_for_key", password.toCharArray());
_

次に、キーと証明書がある場合は、暗号化です。暗号化用。 Cipherクラスのインスタンスが必要です。

_Cipher c = Cipher.getInstance(key.getAlgorithm());
c.init(Cipher.ENCRYPT_MODE, key); 
_

暗号化の準備ができた暗号。暗号化データが比較的小さい場合は、update()メソッドを使用できます。それ以外の方法は、CipherOutputStreamを作成することです。

復号化するには、異なるモードで暗号を初期化し、暗号化アルゴリズムに応じてキーを入力します。対称アルゴリズムの場合、鍵は同じになります。暗号化の非対称アルゴリズムの場合は公開鍵を使用し、復号化の場合は秘密鍵を使用します。

この 記事 では、暗号化についてさらに学ぶことができます。

19
user1516873

このブログ投稿はあなたにそれを完全に説明するはずです

PEMファイルでのPKCS12暗号化の使用。

これを実行するには、最初にJava PFX(Personal File Exchange)形式のキーストアが必要です。

Keytoolコマンド:

 keytool -genkeypair -alias mykeystore -keypass lala -keystore
 mykeystore.pfx -storepass lala -validity 10000 -keyalg RSA -keysize
 2048 -storetype pkcs12

これにより、mykeystore.pfxファイルが生成されます。このファイルは、Firefoxに証明書としてインポートできます。

インポート-Firefoxを開く–ツール–オプション–詳細–証明書の表示–証明書–インポート– PFXファイルの選択–インポート.

Export-証明書を選択–表示–詳細– X.509 PEMにエクスポート)。 (DERにエクスポートすることもできます)

1。秘密鍵

まず、PFXファイルから秘密鍵を抽出する必要があります。

2。公開鍵

次に、公開鍵を使用してファイルを暗号化する必要があります。ただし、最初に公開鍵が必要です。

3。公開鍵による暗号化

これで、ファイルを暗号化できる公開鍵ができました。

4。秘密鍵による復号化

これで、ファイルは暗号化され、受信側が送信/保存して…まあ…受信して復号化できるようになりました。それを復号化するには、秘密鍵が必要です。幸い、private.pemファイルに保存/保存されています。

5。 AESキーによる暗号化/復号化

暗号化/復号化するもう1つの方法は、AES256ビットキーを使用することです。キーはファイルごとにランダムに生成され、ファイルシステムに書き込まれます。次に、このAESキーは、上記のRSAメカニズムを使用して暗号化できます。これにより、大きなファイルの暗号化のパフォーマンスが向上します。

出典- http://coenos.com/blog/?p=257

6
dsgriffin