encryption - BouncycaSTLe 加密私钥 PEM 输出 : RSA PRIVATE KEY vs PRIVATE KEY

标签 encryption cryptography bouncycastle pkcs#8 pkcs#1

我在使用 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/

相关文章:

c# - RijndaelManaged 加密替换企业库

C 凯撒密码 ASCII 字母换行

c# - 如何在 RSA 实例的实例化中使用 Json Web key

c# - 使用 Pkcs10CertificationRequest 获取主题备用名称

c++ - openssl 函数定义密码顺序

encryption - AES PKCS7填充

java - 从字节创建 3DES key

python - 如何正确环绕单字节 XOR key ?

java - Java字符串的PGP加密

c# - 在 .NET Compact Framework 3.5 上实现 TLS 1.2