Bouncycastle加密私钥PEM输出:RSA PRIVATE KEY vs PRIVATE KEY

时间:2016-09-28 12:00:09

标签: encryption cryptography bouncycastle pkcs#8 pkcs#1

我在使用Java Bouncycastle的客户端和使用Python RSA库的密钥服务器之间交换私钥时遇到困难。 PEM格式用于通过REST传输密钥。 密钥服务器无法解密密钥(当加密密码发生变化时需要)我正在提供,它期望带有PEM的PKCS#1或PKCS#8密钥如下:

-----BEGIN PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,ACCB65DDEB20F5AB

EcU3fekuLeUc0viPJ20vAG+Jg1Igkvm+JTjnLmMBE6SwDS/hkf3KP0bFto7Pv6fJ

但是bouncycastle的输出,使用JcePEMEncryptorBuilder和JcaMiscPEMGenerator的BEGIN字符串略有不同:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,ACCB65DDEB20F5AB

EcU3fekuLeUc0viPJ20vAG+Jg1Igkvm+JTjnLmMBE6SwDS/hkf3KP0bFto7Pv6fJ

当我做了一些研究时,我了解到启动BEGIN RSA PRIVATE KEY的PEM表明密钥是使用PKCS#1编码的。

当我尝试使用JceOpenSSLPKCS8EncryptorBuilder和JcaPKCS8Generator获取PKCS#8加密输出时,我得到一个PEM如下:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICrjAoBgoqhkiG9w0BDAEDMBoEFP+MLFFaKGC6J/37jF7wRgL3coZdAgIIAASC
AoAdWVo4kAQ1S0stQZbzca7wL876nzlKfcOa4BKsCttPnFVPugJOvGDnATgUK5P/

所以我的问题是:有没有办法让bouncycastle以BEGIN PRIVATE KEY的形式输出带有加密私钥的PEM,或者是期望格式错误的python库?

除此之外,我无法控制bouncycastle是否在JcePEMEncryptorBuilder中使用PKCS#1或PKCS#8。它使用的是PrivateKeyInfo#getEncoded,但文档并不清楚PKCS格式。

Bouncycastle版本:bcpkix-jdk15on 1.52

1 个答案:

答案 0 :(得分:0)

原来,Python lib没有正确处理所有标准格式,所以我们使用另一个支持Bouncycastle发送格式的Python lib来修复它。