d2i_X509_fp
时间: 2024-04-14 08:24:02 浏览: 109
d2i_X509_fp是一个OpenSSL库中的函数,用于从文件指针中读取X.509证书并将其转换为X509结构体。它的函数原型如下:
```c
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
```
该函数接受两个参数:
- `fp`:一个指向已打开的文件的指针,该文件包含X.509证书的二进制表示。
- `x509`:一个指向X509结构体指针的指针,用于存储解析后的证书。
函数返回一个指向解析后的X509结构体的指针,如果解析失败则返回NULL。
使用d2i_X509_fp函数可以方便地从文件中读取X.509证书,并将其转换为可操作的结构体,以便进行后续的证书操作。
相关问题
d2i_PublicKey接口需要传入的公钥数据格式应该是怎么样的, 我应该怎么从一个pem证书里面提取该数据。请使用linux c语言实现
d2i_PublicKey接口需要传入DER编码格式的公钥数据。如果你有一个PEM格式的证书文件,可以使用OpenSSL库中的函数来提取DER编码格式的公钥数据。下面是一个简单的C代码片段,它使用OpenSSL库中的函数从PEM证书文件中提取公钥数据并将其转换为DER编码格式:
```c
#include <stdio.h>
#include <openssl/pem.h>
#include <openssl/evp.h>
int main()
{
FILE *fp;
EVP_PKEY *pubkey;
X509 *cert;
const unsigned char *p_der;
int len;
// 打开PEM证书文件
fp = fopen("cert.pem", "r");
if (fp == NULL) {
printf("Failed to open certificate file\n");
return 1;
}
// 读取PEM证书
cert = PEM_read_X509(fp, NULL, NULL, NULL);
if (cert == NULL) {
printf("Failed to read certificate\n");
fclose(fp);
return 1;
}
// 从证书中提取公钥
pubkey = X509_get_pubkey(cert);
if (pubkey == NULL) {
printf("Failed to extract public key from certificate\n");
fclose(fp);
return 1;
}
// 将公钥转换为DER编码格式
len = i2d_PublicKey(pubkey, NULL);
p_der = malloc(len);
if (!p_der) {
printf("Memory allocation failed\n");
fclose(fp);
return 1;
}
i2d_PublicKey(pubkey, &p_der);
// 输出DER编码格式的公钥数据
printf("DER-encoded public key:\n");
for (int i = 0; i < len; i++) {
printf("%02x", p_der[i]);
}
printf("\n");
// 释放资源
free(p_der);
EVP_PKEY_free(pubkey);
X509_free(cert);
fclose(fp);
return 0;
}
```
这个程序假定PEM证书文件名为"cert.pem",并且使用了OpenSSL库中的PEM_read_X509和i2d_PublicKey函数来读取和处理证书。运行这个程序后,它将输出DER编码格式的公钥数据。
import re import subprocess import requests import json from pprint import pprint url = "https://www.bilibili.com/video/BV1fi4y1K7Na/?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click&vd_source=4545a0e83c576b93b1abd0ca4e16ab4d" headers = { "referer": "https://www.bilibili.com/", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", "cookie":"i-wanna-go-back=-1; _uuid=C106610D104-6D27-6584-66E1-FCDE2859156A75277infoc; FEED_LIVE_VERSION=V8; home_feed_column=5; buvid3=D2AE610A6-6EE7-B48E-10C51-9E8269B10C88776898infoc; header_theme_version=CLOSE; DedeUserID=1852701166; DedeUserID__ckMd5=ac9474243bdd3627; nostalgia_conf=-1; CURRENT_PID=e16a0380-e1cd-11ed-a872-2f97008834b2; rpdid=|(k|k~u|)RY)0J'uY)kkl|m)m; b_ut=5; browser_resolution=1482-792; CURRENT_BLACKGAP=0; buvid_fp_plain=undefined; CURRENT_FNVAL=4048; b_nut=1683881044; hit-new-style-dyn=1; hit-dyn-v2=1; SESSDATA=3e3851ea%2C1704423625%2C1959b%2A72SteLEoaNhz8Q6ifKiYFGRpSBjpMp2TG-QWAao2iv2yR5ci81QOokmXevCx102rLpwUc9qgAAQgA; bili_jct=2ea1af9f8ae6f19867c8cd3dc1bfd047; fingerprint=dd5c1878758a4b317420b66dad49b677; b_lsid=97F1E5C5_1894440C9F1; buvid4=9D5A25A5-A648-0805-4C59-8178C4E4362B31067-023042319-0THAXXn9jKfRyf3rDh/fQA%3D%3D; buvid_fp=dd5c1878758a4b317420b66dad49b677; sid=7i4lnopc; bp_video_offset_1852701166=817021346575810700; PVID=1" } response = requests.get(url, headers=headers) name = re.findall('"title":"(.*?)"',response.text)[0].replace(' ','') html_data = re.findall('<script>window.__playinfo__=(.*?)</script>',response.text)[0] json_data = json.loads(html_data) #print(name) # print(html_data) # print(json_data) # pprint(json_data) audio_url = json_data['data']['dash']['audio'][0]['baseUrl'] video_url = json_data['data']['dash']['video'][0]['baseUrl'] # print(audio_url) # print(video_url) audio_content = requests.get(url=audio_url,headers=headers).content video_content = requests.get(url=video_url,headers=headers).content with open("D:\\study\\B站\\素材\\" + name + ".mp3", mode="wb") as audio: audio.write(audio_content) with open("D:\\study\\B站\\素材\\" + name + ".mp4", mode="wb") as video: video.write(video_content) cmd = f'ffmpeg -i D:\\study\\B站\\素材\\{name}.mp4 -i D:\\study\\B站\\素材\\{name}.mp3 -c:a aac -strict experimental D:\\study\\B站\\视频1080P\\{name}output.mp4' subprocess.run(cmd)
这段代码看起来是从Bilibili网站上下载视频和音频,并将它们合并为一个输出视频文件。代码中使用了requests库发送HTTP请求获取网页内容,使用re库进行正则表达式匹配提取视频标题和播放信息,使用json库解析JSON数据,然后使用subprocess库调用ffmpeg命令将音频和视频合并。
你有什么问题吗?
阅读全文