2

SpongyCastle を使用して PGP キーをインポートし、それを使用して復号化できることを確認したら、キーリングを保護するためにパスワードを追加したいと考えています。したがって、暗号化されたコピーを作成します。

secretKeyRing = PGPSecretKeyRing.copyWithNewPassword(secretKeyRing, new char[] {},
                newPassPhrase.toCharArray(), PGPEncryptedData.CAST5,
                new SecureRandom(), new BouncyCastleProvider());

次のコマンドで復号化をテストします。

testKey = secretKeyRing.getSecretKey().extractPrivateKey(newPassPhrase.toCharArray(), new BouncyCastleProvider());

これはどうやらうまくいきます。

同じパスワードを使用して、この暗号化されたキーでファイルを復号化しようとすると:

PGPPrivateKey testKey = secretKey.extractPrivateKey(passPhrase.toCharArray(),
                                                   new BouncyCastleProvider());

ここで、secretKey はキーリングのマスター キーです。PGPException というメッセージが表示されます。

Exception constructing key

明らかな何かが欠けているように感じます。詳しくはお気軽にお尋ねください。

これは私が構築しているカスタム pgp アプリ上にあり、1 つの秘密鍵をインポートするだけでよいため、マスター キーが唯一の鍵であることがわかります。

4

1 に答える 1

1

この問題の解決策を見つけました。同じアルゴリズムを使用して新しいキーリングをエンコードするだけで済みました。

secretKeyRing = PGPSecretKeyRing.copyWithNewPassword(secretKeyRing, new char[] {},
                newPassPhrase.toCharArray(), secretKeyRing.getSecretKey().getKeyEncryptionAlgorithm(),
                new SecureRandom(), new BouncyCastleProvider());
于 2013-12-16T09:37:50.093 に答える