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
}
}
這實際上是一個gpg問題,因爲不管你在Java方面做了什麼,你仍然需要gpg來完成你的出價。 – 2011-04-09 21:13:09
對安全性不好,但因爲你沒有給出上下文我不知道這是一個壞建議還是好的建議......如果你只是想能夠生成密鑰而不關心密碼,那麼使用硬編碼的。 – grahamrb 2011-04-09 21:21:12
我想要*沒有*密碼的鑰匙。我正在使用它們進行文件的一次性解密。您爲公鑰加密文件,稍後再獲取私鑰再次解密。密碼不是必需的,硬編碼對用戶來說很煩人。 – 2011-04-09 21:43:27