Java 如何使用BouncyCastle生成没有密码短语的OpenPGP密钥对?
我正在做一个项目,需要为公钥加密生成GPG密钥。我选择的语言是Scala,用于加密的库是 密钥生成工作正常,但我找不到一种没有密码短语生成密钥的方法。在BounceyCastle中生成密钥的每个类和每个方法都需要一个密码短语 使用空密码短语会导致gpg在解密/签名时仍向我索要密码,传递null会在密钥生成时引发异常 以下是我正在使用的代码(导入):Java 如何使用BouncyCastle生成没有密码短语的OpenPGP密钥对?,java,scala,bouncycastle,pgp,openpgp,Java,Scala,Bouncycastle,Pgp,Openpgp,我正在做一个项目,需要为公钥加密生成GPG密钥。我选择的语言是Scala,用于加密的库是 密钥生成工作正常,但我找不到一种没有密码短语生成密钥的方法。在BounceyCastle中生成密钥的每个类和每个方法都需要一个密码短语 使用空密码短语会导致gpg在解密/签名时仍向我索要密码,传递null会在密钥生成时引发异常 以下是我正在使用的代码(导入): 您可以尝试使用SymmetricKeyAlgorithmTags.NULL(即不加密)作为PGPKeyRingGenerator构造函数的encAl
您可以尝试使用SymmetricKeyAlgorithmTags.NULL(即不加密)作为PGPKeyRingGenerator构造函数的encAlgorithm参数。可能API仍然需要一个占位符“passPhrase”,但我相信在这种情况下它会被忽略。这确实是一个gpg问题,因为无论您在Java方面做什么,您仍然需要gpg来完成您的投标。这对安全性不好,但由于您没有给出上下文,我无法判断这是一个坏建议还是一个好建议。。。如果你只想生成密钥,而不在乎密码,那么就使用硬编码密钥。我想要没有密码的密钥。我用它们对文件进行一次性解密。您可以为公钥加密文件,稍后再获取私钥对其进行解密。密码是不需要的,硬编码它是烦人的用户。
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
}
}