【问题标题】:Encrypt a private key with Password using BouncyCastle使用 BouncyCastle 使用密码加密私钥
【发布时间】:2013-01-13 21:03:20
【问题描述】:

我是 BouncyCastle 的新手。我有一个使用以下代码生成的私钥。

     final CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
     keypair.generate(1024);
     final PrivateKey privKey = keypair.getPrivateKey();

我会使用 AES 使用密码或使用 BouncyCastle 的某些支持 openssl 的算法对其进行加密。我正在尝试从哪里开始,因为我找不到任何好的教程。

【问题讨论】:

标签: java ssl ssl-certificate bouncycastle private-key


【解决方案1】:

如果您只想将您的私钥输出到密码短语“12345”受保护的 PEM 格式和文件“privatekey.pem”,您可以使用此 BC 代码:

JceOpenSSLPKCS8EncryptorBuilder encryptorBuilder = new JceOpenSSLPKCS8EncryptorBuilder(PKCS8Generator.PBE_SHA1_3DES); encryptorBuilder.setRandom(EntropySource.getSecureRandom()); encryptorBuilder.setPasssword("12345".toCharArray()); OutputEncryptor oe = encryptorBuilder.build(); JcaPKCS8Generator gen = new JcaPKCS8Generator(privKey,oe); PemObject obj = gen.generate(); PEMWriter pemWrt = new PEMWriter(new FileWriter("privatekey.pem")); pemWrt.writeObject(obj); pemWrt.close();

然后你可以使用 openssl 获取私钥

$ openssl rsa -in privatekey.pem -check 输入 privatekey.pem 的密码: RSA 密钥正常 编写 RSA 密钥 -----开始 RSA 私钥----- ...... -----结束 RSA 私钥-----

PEMWriter 的“标准”使用不会通过密码保护您的私钥:(

【讨论】:

  • 你有类似的 sn-p 用于加载用密码包装的 pem 密钥吗?
【解决方案2】:

如果您希望使用 AES-256 而不是 PKCS8 支持的旧 DES 变体之一来保护您的私钥,这将起作用:

public String toPem(String password) throws IOException {

  StringWriter sw = new StringWriter();

  try (JcaPEMWriter pemWriter = new JcaPEMWriter(sw)) {

    PEMEncryptor encryptor =
        new JcePEMEncryptorBuilder("AES-256-CBC").build(password);

    // privateKey is a java.security.PrivateKey
    JcaMiscPEMGenerator gen = new JcaMiscPEMGenerator(privateKey, encryptor);
    pemWriter.writeObject(gen);
  }

  return sw.toString();
}

您可以使用 openssl 验证输出。在我的情况下,密钥是 EC,所以使用这个命令:

$ openssl ec -in key.txt -passin pass:password -text

根据 RSA 密钥的需要进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 2014-05-20
    • 2017-03-17
    • 2012-08-02
    • 2015-07-29
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多