首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何读取.pem文件以获取私钥和​​公钥

要读取.pem文件以获取私钥和公钥,您可以使用以下方法:

  1. 使用Python的cryptography库:

安装cryptography库:

代码语言:txt
复制
pip install cryptography

读取私钥和公钥:

代码语言:python
代码运行次数:0
复制
from cryptography.hazmat.primitives.serialization import load_pem_private_key, load_pem_public_key
from cryptography.hazmat.backends import default_backend

def read_private_key(pem_file):
    with open(pem_file, 'rb') as key_file:
        private_key = load_pem_private_key(
            key_file.read(),
            password=None,
            backend=default_backend()
        )
    return private_key

def read_public_key(pem_file):
    with open(pem_file, 'rb') as key_file:
        public_key = load_pem_public_key(
            key_file.read(),
            backend=default_backend()
        )
    return public_key
  1. 使用OpenSSL命令行工具:

安装OpenSSL:

代码语言:txt
复制
# 对于Windows,请访问 https://slproweb.com/products/Win32OpenSSL.html 下载并安装
# 对于Linux,请使用包管理器安装,例如:
sudo apt-get install openssl

读取私钥和公钥:

代码语言:txt
复制
# 读取私钥
openssl rsa -in private_key.pem -noout -text

# 读取公钥
openssl rsa -pubin -in public_key.pem -noout -text
  1. 使用Node.js的crypto库:

安装crypto库:

代码语言:txt
复制
npm install crypto

读取私钥和公钥:

代码语言:javascript
复制
const fs = require('fs');
const crypto = require('crypto');

function readPrivateKey(pemFile) {
    const privateKey = fs.readFileSync(pemFile);
    return crypto.createPrivateKey(privateKey);
}

function readPublicKey(pemFile) {
    const publicKey = fs.readFileSync(pemFile);
    return crypto.createPublicKey(publicKey);
}
  1. 使用Java的Bouncy Castle库:

安装Bouncy Castle库:

代码语言:txt
复制
# 对于Maven项目,在pom.xml中添加以下依赖:<dependency>
   <groupId>org.bouncycastle</groupId>
   <artifactId>bcprov-jdk15on</artifactId>
   <version>1.68</version>
</dependency>

# 对于Gradle项目,在build.gradle中添加以下依赖:
implementation 'org.bouncycastle:bcprov-jdk15on:1.68'

读取私钥和公钥:

代码语言:java
复制
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder;
import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import java.io.FileReader;
import java.io.IOException;
import java.security.PrivateKey;
import java.security.PublicKey;

public class Main {
    public static PrivateKey readPrivateKey(String pemFile) throws IOException {
        try (PEMParser pemParser = new PEMParser(new FileReader(pemFile))) {
            Object object = pemParser.readObject();
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
            if (object instanceof PEMEncryptedKeyPair) {
                PEMEncryptedKeyPair encryptedKeyPair = (PEMEncryptedKeyPair) object;
                PEMKeyPair keyPair = encryptedKeyPair.decryptKeyPair(new JceOpenSSLPKCS8DecryptorProviderBuilder().build("your-password".toCharArray()));
                return converter.getPrivateKey(keyPair.getPrivateKeyInfo());
            } else if (object instanceof PEMKeyPair) {
                PEMKeyPair keyPair = (PEMKeyPair) object;
                return converter.getPrivateKey(keyPair.getPrivateKeyInfo());
            }
        }
        return null;
    }

    public static PublicKey readPublicKey(String pemFile) throws IOException {
        try (PEMParser pemParser = new PEMParser(new FileReader(pemFile))) {
            Object object = pemParser.readObject();
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
            if (object instanceof PEMKeyPair) {
                PEMKeyPair keyPair = (PEMKeyPair) object;
                return converter.getPublicKey(keyPair.getPublicKeyInfo());
            }
        }
        return null;
    }
}

请注意,这些示例仅用于演示如何读取.pem文件中的私钥和公钥。在实际应用中,您需要根据您的需求和环境进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

pfx文件解析私钥

最近某行对接,发现私钥pfx文件形式传给我们,需要我们自己进行读取,当时头就有点儿大(菜鸟,第一次接触,哎~~~) 先说一下pfx证书与cer证书的区别 PFX证书:由Public Key Cryptography...Standards #12,PKCS#12标准定义,包含了私钥的二进制格式的证书形式,pfx作为证书文件后缀名。...CER证书:证书中没有私钥,DER 编码二进制格式的证书文件/BASE64 编码格式的证书文件cer作为证书文件后缀名。 综上所述:pfx证书文件中比cer文件中多了私钥。...其他不多说看代码,pfx文件的生成方法及私钥导出方法(.net版) /// /// 获取私钥 /// ...{ return “”; } } /// /// 获取

1.4K20
  • 手把手教你接入支付宝支付

    支付宝密钥处理体系 所以需要获取到应用、应用私钥以及支付宝: ①应用 由商户自己生成的RSA(与应用私钥必须匹配),商户需上传应用到支付宝开放平台,以便支付宝使用该验证该交易是否是商户发起的...生成应用私钥pem文件,输入命令:genrsa -out rsa_private_key.pem 2048 生成应用pem文件,输入命令:rsa -in rsa_private_key.pem...-pubout -out rsa_public_key.pem 支付宝需要上传应用获取,如果不使用pem文件,代码中直接放上支付宝就行,如果要使用pem文件,可以将应用pem文件复制一份...② 从pem文件读取密钥 首先获取存放密钥文件的路径,为了防止出现意外,可获取文件的绝对路径,如下: /// /// 获取私钥的路径(绝对路径) /// ...,区别就不细说,这里使用RSACheckV1方法,第一个参数便是支付宝返回的异步通知结果,第二个参数传入支付宝,同样最后一个参数传false从代码读取支付宝,传true从pem 文件读取

    2K10

    再谈加密-RSA非对称加密的理解使用

    描述了将用户私钥、证书其他相关信息打包的语法。 含有私钥,同时可以有,有口令保护 格式一般为 .pfx。 由于它可以加密码保护,打开时需要一串特殊密码,所以相对安全些。...pem格式 最普通的证书格式,-----BEGIN CERTIFICATE----- 开头,-----END CERTIFICATE-----结尾;有些pem证书把私钥也放在了一个文件中,但是很多平台还是需求证书私钥分开放在不同的文件中...pem证书有以下特点: base64编码; 有.pem, .crt, .cer, .key文件后缀; Apache等类似服务器使用pem格式证书; der格式 der格式是pem格式证书的二进制格式,证书私钥都可以...其特点为: base64编码; 文件后缀为 .p7p, .p7c; window或java tomcat等平台支持此类型; PKCS#12(pfx)格式 它能把服务器证书(包括),中间证书私钥存储在一起...文件里 openssl rsa -in rsa_private_key.pem -pubout -out pub.pem // 通过私钥生产 此外,介绍一下openssl提供的一个测试加密速度的小工具

    2.5K90

    安全的数据库图形管理工具(1):准备密钥

    非对称加密与对称加密不同的是它有两个密钥——私钥是公开的,可以给任何人;私钥只能你自己保管。...等运行完之后查看客户端程序对应的目录下会有两个文件——self_private_key.pem(自己的私钥server_public_key.pem(服务器的)。如图所示。 ?...同样的,服务器程序所在的目录下也会有两个文件——self_private_key.pem(自己的私钥client_public_key.pem(客户端的)。 ?...() # 打开文件读取 public_key = rsa.PublicKey.load_pkcs1(public_key) # 加载 private_key = open("self_private_key.pem...() # 打开文件读取 public_key = rsa.PublicKey.load_pkcs1(public_key) # 加载 private_key = open("self_private_key.pem

    1.2K20

    详解 RSA 非对称加密

    数字证书 传输问题 在密文传输过程中,客户端(Client C)向服务器(Server S)发送数据,C使用S的加密,这样只有S使用自己的私钥解密才能拿到信息,其他人即使得到了数据,没有S的私钥也没用...描述了将用户私钥、证书其他相关信息打包的语法。 含有私钥,同时可以有,有口令保护 格式一般为 .pfx。 由于它可以加密码保护,打开时需要一串特殊密码,所以相对安全些。...pem格式 最普通的证书格式,-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾;有些pem证书把私钥也放在了一个文件中,但是很多平台还是需求证书私钥分开放在不同的文件中...pem证书有以下特点: base64编码; 有.pem, .crt, .cer, .key文件后缀; Apache等类似服务器使用pem格式证书; der格式 der格式是pem格式证书的二进制格式,证书私钥都可以...其特点为: base64编码; 文件后缀为 .p7p, .p7c; window或java tomcat等平台支持此类型; PKCS#12(pfx)格式 它能把服务器证书(包括),中间证书私钥存储在一起

    1.6K20

    使用openssl实现RSA非对称加密

    简单定义:私钥,加密和解密使用的是两个不同的密钥,所以是非对称 系统:ubuntu 14.04 软件:openssl java php 生成私钥 使用命令生成私钥: openssl genrsa...-out rsa_private_key.pem 1024 参数:genrsa 生成密钥 -out 输出到文件 rsa_private_key.pem 文件名 1024 长度 从私钥中提取...: openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 参数: rsa 提取 -in 从文件中读入 rsa_private_key.pem...文件名 -pubout 输出 -out 到文件 rsa_public_key.pem 文件名 shell加解密 新建一个readme.txt 内容是taoshihan 使用加密: openssl...加密 -in 从文件输入 readme.txt 文件名 -inkey 输入的密钥 rsa_public_key.pem 上一步生成的 -pubin 表名输入是文件 -out输出到文件

    3.5K10

    接口数据使用了 RSA 加密签名?一篇文章带你搞定

    python来实现RSA加解密签名测试面试宝典 ​ 2、RSA 算法简介: RSA加密算法是一种非对称加密算法,加密的秘是由私钥两部分组成秘对,用来加密消息,私钥用来对消息进行解密...A的消息通过加密签名处理之后,再发送出去给B,就算被人截获了,也没有关系,没有B的私钥无法对消息进行解密,就算获取A的,想要发送伪造信息,没有A私钥也无法进行签名。...rsa = RSA.generate(1024, random_gen) # 获取,保存到文件 private_pem = rsa.exportKey() with open('private.pem...', 'wb') as f: f.write(private_pem) # 获取私钥保存到文件 public_pem = rsa.publickey().exportKey() with open...from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 msg = "待加密明文内容" # 读取文件中的 key

    1.9K20

    生成CSR自签名证书

    2.(Public Key):CSR包含了与证书请求者相关的。这个用于加密和数字签名。3.扩展信息:除了主题信息,CSR还可以包含各种扩展信息,指定证书的用途、有效期、密钥用途等。...CSR 的生成 生成CSR通常包括以下步骤: 1.生成密钥对:首先,生成一个密钥对,其中包括私钥。通常使用RSA或ECDSA算法生成密钥。2.创建主题信息:确定要包含在CSR中的主题信息。...•代码签名:开发者可以生成CSR,用于获取代码签名证书,确保其代码在分发执行时的完整性真实性。...,以及私钥管理的包,比如crypto/rsa。...私钥也被生成并保存到文件中。 生成自签名证书: 生成自签名证书的过程需要使用之前生成的CSR私钥

    49740

    非对称加密与安全证书看这一篇就懂了

    私钥证书 除算法外,非对称加密中另外两个重要的概念是私钥对外公开,任何人均可持有使用;私钥自行保管,其安全性是通信安危的关键。...私钥的作用一般分为两种: 加密,私钥解密,主要用于通信; 私钥加密(签名),解密(验证),主要用于数字签名。...证书包含,所以拿到证书意味着就拿到了对方的。几乎所有的浏览器都会对证书进行校验,确保网页通信中的安全。...CSR(Certificate Sign Request)、、密钥证书归属为一类。CSR 用来获取证书,包含申请人的、邮件等证明身份的信息。...遵循 X509 标准的证书文件结尾多为 PEM、der、crt 等;遵循 PKCS 标准的证书常用后缀名是 pfx、p12 等。 本次对接晕乎的第二个地方是一处地方读取密钥需要密码,另一处直接读取

    1.7K30

    非对称加密与安全证书看这一篇就懂了 转

    私钥证书 除算法外,非对称加密中另外两个重要的概念是私钥对外公开,任何人均可持有使用;私钥自行保管,其安全性是通信安危的关键。...私钥的作用一般分为两种: 加密,私钥解密,主要用于通信; 私钥加密(签名),解密(验证),主要用于数字签名。...证书包含,所以拿到证书意味着就拿到了对方的。几乎所有的浏览器都会对证书进行校验,确保网页通信中的安全。...CSR(Certificate Sign Request)、、密钥证书归属为一类。CSR 用来获取证书,包含申请人的、邮件等证明身份的信息。...-nodes # 生成的tlanyan.cer文件包含了证书,对应导入前的tlanyan.crttnPEM . pri v.key两个文件 pem jks 的格式转换太过复杂, 具体请看

    1.4K20

    技术分享 | MySQL : SSL 连接浅析

    非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的,一个是由用户秘密保存的私钥。利用(或私钥)加密的数据只能用相应的私钥(或)才能解密。...数字证书-如何保证的真实性? 如果有攻击者伪造了 Server 端的并发了客户端,客户端会访问到假网站被窃取信息。...,确信请求确实由用户发送而来); CA 对用户的所有信息(、所有者、有效期...)进行 Hash 计算,得到一个 Hash 值,然后再使用私钥对 Hash 值进行加密得到签名,就得到了数字证书。...、私钥 # 使用CA私钥对服务器签名,得到服务器证书 server-cert.pem,证书中包含、所有者、有效期等明文信息,也有经过 CA 私钥加密对公、所有者、有效期...加密后的签名 openssl...使用CA私钥对客户端签名,得到客户端证书 client-cert.pem,一般不需要验证客户端身份,这些文件就不需要用到。

    3.1K10

    OpenSSL - RSA非对称加密实现

    在非对称加密中,需要两对密钥,私钥私钥属于对立关系,一把加密后,只有另一把才可以进行解密。...数据加密 数字证书内包含了,在进行会话连接时,双方交换各自的,保留自己的私钥。进行数据传输时,利用对方的进行数据加密。加密后的数据只有对方的私钥才能进行解密。...私钥数字签名 私钥进行数据加密,所有人用都能解密数据,但是加密后的数据却唯有私钥能生成。可以用于消息来源验证。...具体RSA加密算法在计算机网络中的运用方式原理可以查看:OpenSSL - 网络安全之数据加密和数字证书 如何利用openssl命令行来生成证书密钥可查看:OpenSSL - 利用OpenSSL自签证书...生成密钥或读取密钥 根据需要选择签名还是加密 使用进行数据加密 使用私钥进行数字签名 数据通过网络进行安全传输 对端进行解密获取明文 下面是OpenSSL的RSA加密算法对数据进行加密解密过程实现

    3.2K90

    pem 文件详解

    :存放私钥pem 后缀的证书都是base64编码;der 后缀的证书都是二进制格式;crt .cer 后缀的文件都是证书文件(编码方式不一定,有可能是.pem,也有可能是.der...);.pfx 主要用于windows平台,浏览器可以使用,也是包含证书私钥获取私钥需要密码才可以) X509文件扩展名(x509 这种证书只有,不包含私钥。)...组合 在某些情况下,将多个X.509基础结构组合成单个文件是有利的。一个常见的例子是将私钥组合到同一个证书中。...其中一个文件可以包含以下任何一个:证书,私钥,签名证书,证书颁发机构(CA)/或授权链。...服务器认证证书,中级认证证书私钥都可以储存为PEM格式(认证证书其实就是)。Apache类似的服务器使用PEM格式证书。

    21K20

    如何使用RSA 对数据加解密签名验签?一篇文章带你搞定

    考虑到一种情况:发送者S获取接收者R的时,被中间人A获取到了这个,通过对信息加密,冒充S来给R发篡改的报文,同样R接受信息后也能够通过持有的私钥解密报文数据,接受者无法辨别数据发送者身份,存在报文非法修改风险...签名过程:发送者S同样也生成了一对秘,事先将给到R,在发送消息之前,先用R给的对报文加密,然后签名使用S自己私钥来签名,最后将加密的消息签名一起发过去给R,接受者R在接收到发送者S发送的数据后...这样一来,发送过程信息被获取,没有R的私钥无法解密信息,即使获取到发送者S的,想要仿造发送信息没有S的私钥无法签名,同理R给S回复信息时,可以通过R的加密,自己的私钥生成签名,S接收到数据使用同样的方式进行解密验证身份...:2048是秘的长度 rsa = RSA.generate(2048, random_gen) # 获取私钥,保存到文件 private_pem = rsa.exportKey() with open...('private.pem', 'wb') as f: f.write(private_pem) # 获取保存到文件 public_pem = rsa.publickey().exportKey

    3.8K10

    RSA 签名验签 (PHP为例),以及各个秘格式解析

    函数明细 openssl_pkey_get_details返回包含密钥详情的数组,如类型type,加密位数bits等 openssl_pkey_get_private获取私钥 只能打开是PEM格式的秘...,成功返回资源类型 openssl_pkey_get_public获取 只能打开是PEM格式的秘,成功返回资源类型 openssl_private_encrypt使用私钥加密数据 加密后的数据可以通过...openssl_public_encrypt使用加密数据 该函数可以用来加密数据,供该匹配的私钥拥有者读取。 它也可以用来在数据库中存储安全数据。...''; echo ''; // 加密 私钥解密 $pubSec = RSA::publicEncrypt(json_encode($data)); echo '加密:' ....密码学标准 - wiki SSL 证书格式普及,PEM、CER、JKS、PKCS12 RSA私钥的生成详解,包含Java、PHP、Android、iOS端

    82420
    领券