3

公開鍵暗号化用の 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
  }
}
4

1 に答える 1

1

PGPKeyRingGenerator コンストラクターの encAlgorithm パラメータに SymmetricKeyAlgorithmTags.NULL (つまり、暗号化しない) を使用してみてください。API にはまだプレースホルダ 'passPhrase' が必要なのかもしれませんが、この場合は無視されると思います。

于 2011-09-11T10:43:04.460 に答える