公開鍵暗号化用の GPG キーを生成する必要があるプロジェクトに取り組んでいます。私が選んだ言語は Scala で、暗号化用のライブラリはBouncyCastle です。
鍵の生成は正常に機能しますが、パスフレーズなしで鍵を生成する方法が見つかりません。BounceyCastle でキーを生成するすべてのクラスとすべての方法には、パスフレーズが必要です。
空のパスフレーズを使用すると、何かを復号化/署名するときに gpg が引き続き要求し、null を渡すとキー生成で例外がスローされます。
これが私が使用しているコードです(インポートは削除されています):
object KeyGenerator {
Security.addProvider(new BouncyCastleProvider())
val kpg = KeyPairGenerator.getInstance("RSA", "BC")
kpg.initialize(2048)
def generateKeyPair(userID: String,
expiration: Option[Date]): PGPSecretKeyRing = {
val now = new Date
val keyPair = kpg.generateKeyPair();
val secretKey = new PGPKeyPair(RSA_GENERAL,
keyPair,
now)
val keyPair2 = kpg.generateKeyPair();
val secretKey2 = new PGPKeyPair(RSA_GENERAL,
keyPair2,
now)
val subpacketGen = new PGPSignatureSubpacketGenerator
subpacketGen.setKeyFlags(true, KeyFlags.CERTIFY_OTHER | KeyFlags.SIGN_DATA
| KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)
val keyRingGen = new PGPKeyRingGenerator(PGPSignature.POSITIVE_CERTIFICATION,
secretKey,
userID,
RSA_GENERAL,
"".toCharArray,
true,
subpacketGen.generate,
null,
new SecureRandom(),
"BC");
keyRingGen.addSubKey(secretKey2)
keyRingGen.generateSecretKeyRing
}
}