2011-04-09 66 views
2

我正在開發一個需要爲公鑰加密生成GPG密鑰的項目。我爲它選擇的語言是Scala和用於加密的東西圖書館是BouncyCastle如何使用BouncyCastle生成沒有密碼的OpenPGP KeyPair?

密鑰生成工作正常,但我不能找到一種方法來生成密鑰沒有口令。在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 
    } 
} 
+0

這實際上是一個gpg問題,因爲不管你在Java方面做了什麼,你仍然需要gpg來完成你的出價。 – 2011-04-09 21:13:09

+0

對安全性不好,但因爲你沒有給出上下文我不知道這是一個壞建議還是好的建議......如果你只是想能夠生成密鑰而不關心密碼,那麼使用硬編碼的。 – grahamrb 2011-04-09 21:21:12

+0

我想要*沒有*密碼的鑰匙。我正在使用它們進行文件的一次性解密。您爲公鑰加密文件,稍後再獲取私鑰再次解密。密碼不是必需的,硬編碼對用戶來說很煩人。 – 2011-04-09 21:43:27

回答

0

你可以嘗試使用SymmetricKeyAlgorithmTags.NULL(即不加密)的encAlgorithm參數PGPKeyRingGenerator構造。這可能是API仍然需要佔位符'passPhrase',但我相信在這種情況下它將被忽略。

相關問題