在Scala生成公共和私人PGP密钥



我在我的Scala项目中使用了弹力城堡库,我写了以下代码

def generateKeyPair(config: PGPKeyInput) : Unit = {
  Security.addProvider(new BouncyCastleProvider())
  val kpg = KeyPairGenerator.getInstance("RSA", "BC")
  kpg.initialize(config.numOfBits)
  val kp = kpg.generateKeyPair()
  val out1 = new FileOutputStream(s"${config.filename}-private.bpg")
  val out2 = new FileOutputStream(s"${config.filename}-public.bpg")
  val sha1Calc = new JcaPGPDigestCalculatorProviderBuilder().build().get(HashAlgorithmTags.SHA1)
  val keyPair = new JcaPGPKeyPair(PublicKeyAlgorithmTags.RSA_GENERAL, kp, new Date())
  val publicKey = keyPair.getPublicKey()
  val signerBuilder = new JcaPGPContentSignerBuilder(publicKey.getAlgorithm(), HashAlgorithmTags.SHA1)
  val secretKeyEncryptionBuilder = new JcePBESecretKeyEncryptorBuilder(SymmetricKeyAlgorithmTags.CAST5, sha1Calc).setProvider("BC").build(config.passphrase.toArray)
  val secretKey = new PGPSecretKey(PGPSignature.DEFAULT_CERTIFICATION, keyPair, config.username, sha1Calc, null, null, signerBuilder, secretKeyEncryptionBuilder)
  secretKey.encode(out1)
  secretKey.getPublicKey.encode(out2)
  out1.close()
  out2.close()
}

此代码有效,我收到了一个公共和私钥文件,但内容都是二进制文件。

我想创建公共密钥文件的方式是它们以

开头
"-----BEGIN PGP PUBLIC KEY BLOCK-----nComment: GPGTools - https://gpgtools.orgnnmQINBFp8jgIBEAC02oIv4ohWCy79/ksR4FhagDtV13a60Ca9N2NDgAd7WNRfx5e4nr6Eqr0m3pinyPzqEyWQc2isa9/LL/Wlb3sBaOIbWtZtmQxlugqa9NaPVYahBkVegnT50IfD4wzURodrjYijp2gN5H4Qu1Tcgjxo=n=hp34n-----END PGP PUBLIC KEY BLOCK-----"

我应该对代码进行什么更改,以便以上指定的格式获得键。

您应该使用ArmoredOutputStream类。如果需要,您也可以包括可选标题。

它应该像以下内容一样简单。

val out1 = new ArmoredOutputStream(new FileOutputStream(s"${config.filename}-private.bpg"))
val out2 = new ArmoredOutputStream(new FileOutputStream(s"${config.filename}-public.bpg"))

最新更新