我在使用 Java BouncycaSTLe 的客户端和使用 Python RSA 库的 key 服务器之间交换私钥时遇到困难。 PEM 格式用于通过 REST 传输 key 。 key 服务器无法解密我提供的 key (加密密码更改时需要),它需要带有 PEM 的 PKCS#1 或 PKCS#8 key ,如下所示:
-----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 表示 key 是使用 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
最佳答案
事实证明,Python 库无法正确处理所有标准格式,因此我们使用另一个支持 BouncycaSTLe 发送格式的 Python 库来修复它。
关于encryption - BouncycaSTLe 加密私钥 PEM 输出 : RSA PRIVATE KEY vs PRIVATE KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39746849/