当前位置: 首页 > 知识库问答 >
问题:

“开始RSA私钥”和“开始私钥”之间的区别

蒲昊苍
2023-03-14

嗨,我在写一个程序,从导入私钥。pem文件,并创建一个私钥对象供以后使用。。我面临的问题是,一些pem文件头以

-----BEGIN PRIVATE KEY-----

而其他人则从

-----BEGIN RSA PRIVATE KEY-----

通过我的搜索,我知道第一个是PKCS#8格式的,但我不知道另一个属于什么格式。

共有2个答案

湛鸿雪
2023-03-14

看看

从上面的链接复制内容以便快速参考:

#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
#define PEM_STRING_X509     "CERTIFICATE"
#define PEM_STRING_X509_PAIR    "CERTIFICATE PAIR"
#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
#define PEM_STRING_X509_CRL "X509 CRL"
#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
#define PEM_STRING_PUBLIC   "PUBLIC KEY"
#define PEM_STRING_RSA      "RSA PRIVATE KEY"
#define PEM_STRING_RSA_PUBLIC   "RSA PUBLIC KEY"
#define PEM_STRING_DSA      "DSA PRIVATE KEY"
#define PEM_STRING_DSA_PUBLIC   "DSA PUBLIC KEY"
#define PEM_STRING_PKCS7    "PKCS7"
#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
#define PEM_STRING_PKCS8    "ENCRYPTED PRIVATE KEY"
#define PEM_STRING_PKCS8INF "PRIVATE KEY"
#define PEM_STRING_DHPARAMS "DH PARAMETERS"
#define PEM_STRING_DHXPARAMS    "X9.42 DH PARAMETERS"
#define PEM_STRING_SSL_SESSION  "SSL SESSION PARAMETERS"
#define PEM_STRING_DSAPARAMS    "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
#define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
#define PEM_STRING_PARAMETERS   "PARAMETERS"
#define PEM_STRING_CMS      "CMS"

鲁羽
2023-03-14

看见https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem(在页面上搜索“BEGIN RSA PRIVATE KEY”)(为子孙后代提供存档链接,以防万一)。

开始RSA私钥是PKCS#1,只是一个RSA密钥。它本质上只是PKCS#8中的关键对象,但前面没有版本或算法标识符BEGIN PRIVATE KEY是PKCS#8,表示密钥类型包含在密钥数据本身中。从链接:

未加密的PKCS#8编码数据以标签开始和结束:

-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----

在base64编码数据中,存在以下DER结构:

PrivateKeyInfo ::= SEQUENCE {
  version         Version,
  algorithm       AlgorithmIdentifier,
  PrivateKey      BIT STRING
}

AlgorithmIdentifier ::= SEQUENCE {
  algorithm       OBJECT IDENTIFIER,
  parameters      ANY DEFINED BY algorithm OPTIONAL
}

因此,对于RSA私钥,OID是1.2.840.113549.1.1.1,并且有一个RSAPrivateKey作为PrivateKey数据位字符串。

与“开始RSA私钥”相反,它总是指定一个RSA密钥,因此不包括密钥类型OIDBEGIN RSA私钥isPKCS#1

RSA私钥文件(PKCS#1)

RSA私钥PEM文件特定于RSA密钥。

它以标签开始和结束:

-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----

在base64编码数据中,存在以下DER结构:

RSAPrivateKey ::= SEQUENCE {
  version           Version,
  modulus           INTEGER,  -- n
  publicExponent    INTEGER,  -- e
  privateExponent   INTEGER,  -- d
  prime1            INTEGER,  -- p
  prime2            INTEGER,  -- q
  exponent1         INTEGER,  -- d mod (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL
}
 类似资料:
  • (我正在用MAC) 我的id_rsa以 但我希望一开始 我已将我的身份证发送给rsa。发布给服务器管理员以获得对服务器的访问权,因此我不想生成新密钥。 > 有什么方法可以将我的id_rsaopenssh私钥转移到RSA私钥吗?(请指挥。) 如果我可以传输,我是否还需要传输id_rsa。酒吧(请发命令。)看来是我的错。pub没有像id_rsa这样的头,所以我不确定是否也应该传输它。 非常感谢。

  • 本文向大家介绍私钥和公钥之间的区别,包括了私钥和公钥之间的区别的使用技巧和注意事项,需要的朋友参考一下 私钥和公钥术语用于加密和解密。这些键用于加密/解密敏感信息。 私钥 私钥用于加密和解密数据。此键在加密的敏感信息的发送者和接收者之间共享。私钥也被称为对称的,对双方都是通用的。私钥加密比公钥加密机制更快。 公钥 公共键用于加密,私有键用于解密数据。私钥在加密的敏感信息的发送者和接收者之间共享。公

  • 我想在Java中通过SSL/TLS建立一个客户机服务器通信。服务器是多线程的。使用openssl,我充当自己的CA(为权威创建私钥和自签名证书)。现在我要为我的服务器和客户端创建密钥和证书,这些密钥和证书是从我创建的CA签名的。 1)我必须根据提示为每个客户创建证书和密钥吗?还是另一种“自动”方式,例如使用脚本? 2)我已经看到用于设置密钥库的代码 问题是我如何单独创建这些jks文件?public

  • 我在使用Java Bouncycastle的客户机和使用Python RSA库的密钥服务器之间交换私钥时遇到了困难。PEM格式用于通过REST传输密钥。keyserver无法解密我提供的密钥(加密密码更改时需要),它需要PKCS#1或PKCS#8密钥和PEM,如下所示: 但是BouncyCastle的输出(使用JCEpeEncryptorBuilder和JcaMiscPEMGenerator)的起

  • 我正在使用Mac上的ssh-keygen生成的公钥/私钥设置文件到服务器的SFTP传递。我生成的私钥看起来与代码库中的其他私钥不同(它没有标头,是“OpenSSH私钥”而不是“RSA私钥”)。

  • 我一直在阅读一些RSA文献和堆栈溢出问题,但我没有得到明确的答案。 仅给定一个RSA私钥模和私钥指数,这是我所拥有的全部(也足够用于所有密码相关操作),我能得到相关的公钥模和公钥指数吗? 另外,我是否可以仅用这两个参数获得私钥的编码形式?我在java中尝试了以下方法(java不是实际的请求),但是支持它的OpenSSL引擎失败,错误为:04000090:RSA例程:openSSL_internal