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

2018年03月07日 11:57:22

阅读数:674
Format Name Description
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).

RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)的更多相关文章

  1. mac中使用终端生成RSA私钥和公钥文件

    1.打开终端输入:cd Desktop/   //进入桌面 2.OpenSSL   //打开 OpenSSL 3.生成私钥pem,  执行命令   genrsa -out rsa_private_ke ...

  2. 求求你们不要再用 RSA 私钥加密公钥解密了,这非常不安全!

    最近经常在网上看到有人说巨硬的 CNG(Cryptography Next Generation 即下一代加密技术) 只提供 RSA 公钥加密私钥解密,没有提供 RSA 私钥加密公钥解密,他们要自己封 ...

  3. C#.NET RSA 私钥签名 公钥验证签名

    C#.NET RSA 私钥签名 公钥验证签名 公钥验签 1.待签名字符串转为byte数组时,一般使用UTF8. 2.将私钥字符串(PKCS8或PKCS1格式)转为C#.NET的RSACryptoSer ...

  4. openssl mac中使用终端生成RSA私钥和公钥文件

    RSA密钥生成命令生成RSA私钥openssl>genrsa -out rsa_private_key.pem 1024生成RSA公钥openssl>rsa -in rsa_private ...

  5. 银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#

    前段时间做的银联支付,折腾了好久,拼凑的一些代码,有需要的朋友可以参考,本人.Net新手,不保证准确性! 这个银联手机支付没有SDK提供,技术支持也没有.Net的,真心不好搞! RSA加解密,这里有个 ...

  6. OpenSSL-Win32,rsa,私钥,公钥,1024,2048

    默认是rsa_private_key1024.pem , PEM格式私钥,C# ,PHP 用. 再生成 pkcs8 格式私钥, JAVA 用. 公钥无格式区分. 1024 的: openssl.exe ...

  7. 生成 RSA 私钥及公钥

    $ openssl # 进入 OpenSSL 程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 # 生成私钥 OpenSSL> pkcs8 ...

  8. RSA私钥加密公钥解密、各种密钥格式转换

    此随笔解决RSA加解密相关的3个问题,详情可以查看源码. 1.公钥加密.私钥解密2.各种格式RSA密钥之间的转换3.不限制加密原文的长度

  9. 使用mac终端生成RSA私钥和公钥文件

    89:~ zhangwenquan$ 89:~ zhangwenquan$ openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Gener ...

随机推荐

  1. Centos7中使用ipset

      1.禁用firewalld systemctl stop firewalld systemctl disable firewalld   2.安装ipset yum -y install ipse ...

  2. (转) 使用vivado创建工程 4[完结]

    由于自己手头暂时没有开发板,因此本节没有测试,故告之. Connecting to ZedBoardBefore we can run the application we have to conne ...

  3. PowderDesign的使用

    (一)PowderDesign的安装 powderDesign下面简称pd,安装的话在网上找到安装包,安装后破解就行了.打开如图: (二)sql导入 操作步骤:File----------->R ...

  4. 覆盖equals时总要覆盖hashCode

    本文涉及到的概念 1.为什么重载equals方法时,要重载hashCode函数;没有重载hashCode带来的问题 2.一个对象hashCode的生成规则       1.为什么重载equals方法时 ...

  5. 引用类型 ( 对象定义 )——RegExp 类型

    var expression = /pattern/flags; 以上为创建正则表达式格式,斜线包围的为正则表达式,flags 有三个值可以选择 本文地址:http://www.cnblogs.com ...

  6. $this->success()传值不完整

    public function manager_doExport() { $search=$_POST['search']; //前台输入2017-12-1,即,$search['starttime' ...

  7. K. Random Numbers(Gym 101466K + 线段树 + dfs序 + 快速幂 + 唯一分解)

    题目链接:http://codeforces.com/gym/101466/problem/K 题目: 题意: 给你一棵有n个节点的树,根节点始终为0,有两种操作: 1.RAND:查询以u为根节点的子 ...

  8. 从python入门ruby

    1.Ruby的函数可以不使用括号 def h(name) puts "hello #{name}" end h "jack" 2.python可以直接访问实例的 ...

  9. MAC泛洪攻击

    先来解释一下啥是泛洪攻击 交换机里有一张专门记录MAC地址的表,为了完成数据的快速转发,该表具有自动学习机制:泛洪攻击即是攻击者利用这种学习机制不断发送不同的MAC地址给交换机,充满整个MAC表,此时 ...

  10. Linux下的压缩解压缩

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进  行压缩了,所以首先就来讲讲t ...