zoukankan      html  css  js  c++  java
  • RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)

    RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)

    FormatNameDescription
    PKCS #7 Cryptographic Message Syntax Standard A PKCS #7 file can be used to store certificates, which is a SignedData structure without data (just the certificates). The file name extension is usually .p7b.p7c
    PKCS #8 Private-Key Information Syntax Standard. Used to carry private certificate keypairs (encrypted or unencrypted).
    PKCS #12 Personal Information Exchange Syntax Standard. Defines a file format commonly used to store private keys with accompanying public key certificates, protected with a password-based symmetric key. It is the successor to PFX from Microsoft.
    DER Distinguished Encoding Rules A binary format for keys or certificates. It is a message transfer syntax specified by the ITU in X.690.
    PEM Privacy Enhanced Mail Base64 encoded DER certificates or keys, with additional header and footer lines. 

    The PEM private key format uses the header and footer lines: 
    -----BEGIN RSA PRIVATE KEY----- 
    -----END RSA PRIVATE KEY----- 

    The PEM public key format uses the header and footer lines: 
    -----BEGIN PUBLIC KEY----- 
    -----END PUBLIC KEY----- 

    The PEM certificate uses the header and footer lines: 
    -----BEGIN CERTIFICATE----- 
    -----END CERTIFICATE----- 

    RSA Public Key file (PKCS#1)

    The RSA Public key PEM file is specific for RSA keys.

    It starts and ends with the tags:

    1.  
      -----BEGIN RSA PUBLIC KEY-----
    2.  
      BASE64 ENCODED DATA
    3.  
      -----END RSA PUBLIC KEY-----

    Within the base64 encoded data the following DER structure is present:

    1.  
      RSAPublicKey ::= SEQUENCE {
    2.  
      modulus INTEGER, -- n
    3.  
      publicExponent INTEGER -- e
    4.  
      }

     

    Public Key file (PKCS#8)

    Because RSA is not used exclusively inside X509 and SSL/TLS, a more generic key format is available in the form of PKCS#8, that identifies the type of public key and contains the relevant data.

    It starts and ends with the tags:

    1.  
      -----BEGIN PUBLIC KEY-----
    2.  
      BASE64 ENCODED DATA
    3.  
      -----END PUBLIC KEY-----

    Within the base64 encoded data the following DER structure is present:

    1.  
      PublicKeyInfo ::= SEQUENCE {
    2.  
      algorithm AlgorithmIdentifier,
    3.  
      PublicKey BIT STRING
    4.  
      }
    5.  
       
    6.  
      AlgorithmIdentifier ::= SEQUENCE {
    7.  
      algorithm OBJECT IDENTIFIER,
    8.  
      parameters ANY DEFINED BY algorithm OPTIONAL
    9.  
      }

    So for an RSA public key, the OID is 1.2.840.113549.1.1.1 and there is a RSAPublicKey as the PublicKey key data bitstring.

     

    RSA Private Key file (PKCS#1)

    The RSA private key PEM file is specific for RSA keys.

    It starts and ends with the tags:

    1.  
      -----BEGIN RSA PRIVATE KEY-----
    2.  
      BASE64 ENCODED DATA
    3.  
      -----END RSA PRIVATE KEY-----

    Within the base64 encoded data the following DER structure is present:

    1.  
      RSAPrivateKey ::= SEQUENCE {
    2.  
      version Version,
    3.  
      modulus INTEGER, -- n
    4.  
      publicExponent INTEGER, -- e
    5.  
      privateExponent INTEGER, -- d
    6.  
      prime1 INTEGER, -- p
    7.  
      prime2 INTEGER, -- q
    8.  
      exponent1 INTEGER, -- d mod (p-1)
    9.  
      exponent2 INTEGER, -- d mod (q-1)
    10.  
      coefficient INTEGER, -- (inverse of q) mod p
    11.  
      otherPrimeInfos OtherPrimeInfos OPTIONAL
    12.  
      }

    Private Key file (PKCS#8)

    Because RSA is not used exclusively inside X509 and SSL/TLS, a more generic key format is available in the form of PKCS#8, that identifies the type of private key and contains the relevant data.

    The unencrypted PKCS#8 encoded data starts and ends with the tags:

    1.  
      -----BEGIN PRIVATE KEY-----
    2.  
      BASE64 ENCODED DATA
    3.  
      -----END PRIVATE KEY-----

    Within the base64 encoded data the following DER structure is present:

    1.  
      PrivateKeyInfo ::= SEQUENCE {
    2.  
      version Version,
    3.  
      algorithm AlgorithmIdentifier,
    4.  
      PrivateKey BIT STRING
    5.  
      }
    6.  
       
    7.  
      AlgorithmIdentifier ::= SEQUENCE {
    8.  
      algorithm OBJECT IDENTIFIER,
    9.  
      parameters ANY DEFINED BY algorithm OPTIONAL
    10.  
      }

    So for an RSA private key, the OID is 1.2.840.113549.1.1.1 and there is a RSAPrivateKey as the PrivateKey key data bitstring.

    The encrypted PKCS#8 encoded data start and ends with the tags:

    1.  
      -----BEGIN ENCRYPTED PRIVATE KEY-----
    2.  
      BASE64 ENCODED DATA
    3.  
      -----END ENCRYPTED PRIVATE KEY-----

    Within the base64 encoded data the following DER structure is present:

    1.  
      EncryptedPrivateKeyInfo ::= SEQUENCE {
    2.  
      encryptionAlgorithm EncryptionAlgorithmIdentifier,
    3.  
      encryptedData EncryptedData
    4.  
      }
    5.  
       
    6.  
      EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    7.  
       
    8.  
      EncryptedData ::= OCTET STRING

    The EncryptedData OCTET STRING is a PKCS#8 PrivateKeyInfo (see above).

  • 相关阅读:
    eclipse快捷键 Eclipse快捷键 10个最有用的快捷键
    ssh之雇员管理系统(5)将struts+spring整合2
    ssh之雇员管理系统(4)改进的hibernate测试
    java中常常建包时,这些包具体是什么意思呢?+项目开发流程、实战
    ssh之雇员管理系统(1)spring测试
    JUnit4概述
    ssh之雇员管理系统(5)添加struts测试
    SQl查询数据库表名、表的列名
    关于人脉大PK的二三事 推荐的方法
    JavaScript有用的代码(ie,save)
  • 原文地址:https://www.cnblogs.com/mingzhang/p/9428964.html
Copyright © 2011-2022 走看看