概述
搞过的同学应该都弄过google 的keybox.xml,里面有google 的attestition key证书内容,类似如下:
<Key algorithm="ecdsa">
<PrivateKey format="pem">-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIGy6AjEzbgGKmraHakjGX7Ld01MaK+d+SUv99GpUSosToAoGCCqGSM49
AwEHoUQDQgAENr+geskxIlYpIRCxZTbFTUI+Zv9B4KrGfOyNp8icyC46ZiCLtoZQ
T6IIDzPElyJ6puG4nLaNX+/9raGBFDMnCA==
-----END EC PRIVATE KEY-----
</PrivateKey>
<CertificateChain>
<NumberOfCertificates>3</NumberOfCertificates>
<Certificate format="pem">-----BEGIN CERTIFICATE-----
MIICLDCCAbKgAwIBAgIKGBmVCRR3EhkhKDAKBggqhkjOPQQDAjAbMRkwFwYDVQQF
ExBiZTQwNjQ2NmJlYTM3ODJiMB4XDTE2MDUyNjE3MzQ1MloXDTI2MDUyNDE3MzQ1
MlowGzEZMBcGA1UEBRMQNmNmZGM4ZjM3ZDBjNDc1OTBZMBMGByqGSM49AgEGCCqG
SM49AwEHA0IABDa/oHrJMSJWKSEQsWU2xU1CPmb/QeCqxnzsjafInMguOmYgi7aG
UE+iCA8zxJcieqbhuJy2jV/v/a2hgRQzJwijgd0wgdowHQYDVR0OBBYEFPOca1nC
LHi7kp/w+fE4pXD51769MB8GA1UdIwQYMBaAFKaz3r8xYJllfb5LA5tz0LBld0oB
MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMCQGA1UdHgQdMBugGTAXghVp
bnZhbGlkO2VtYWlsOmludmFsaWQwVAYDVR0fBE0wSzBJoEegRYZDaHR0cHM6Ly9h
bmRyb2lkLmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8xODE5OTUwOTE0
NzcxMjE5MjEyODAKBggqhkjOPQQDAgNoADBlAjEAo6Fy2NE1Kx3Zozmw8zaFqDCx
vOm+Z+6CXU8rSX2B8pWpdnR+T5efvLdCapmAoK0SAjBGwYT224mzmuG+uxN0ka3D
R1Dc4tD+JlD2rlKbWMoZadPrZ65NpKzm6z/9shwd2Bk=
-----END CERTIFICATE-----
</Certificate>
但是有时候想看一下这个pem对应的内容是什么?
需要使用工具将这个证书内容转换成ASN描述内容,类似如下:
那应该具体如何操作呢?
步骤如下:
1、将pem的内容复制一下;
2、打印https://lapo.it/asn1js/网址
3、将pem内容复制进去,点击“decode”按钮,就可以生成对应的内容了。
那如果拿到的数据是hex十六进制的,那怎么办?
也有办法,可以先将hex转换成二进制文件,然后再复制到这个网页。
实现的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdint.h>
#include <string.h>
static bool _hex2bin(char* hex, uint32_t hex_size, uint8_t* bin, uint32_t bin_size)
{
if (hex_size % 2) {
return false;
}
if (bin_size < hex_size / 2 || !bin) {
return false;
}
uint32_t j = 0;
uint8_t t = 0;
uint8_t c = 0;
for (uint32_t i = 0; i < hex_size; ++i) {
if (hex[i] >= '0' && hex[i] <= '9') {
t = hex[i] - '0';
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
t = hex[i] - 'a' + 10;
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
t = hex[i] - 'A' + 10;
} else {
return false;
}
if (i % 2 == 0) {
c = t << 4;
} else {
c |= t;
bin[j++] = c;
c = 0;
}
}
return true;
}
uint8_t __bin[2048] = {0};
char* __hex = ""; //把你要转换的数据拷贝到这里面来
int main()
{
FILE* fout = fopen("out.bin", "w+");
size_t len = strlen(__hex);
printf("read len %ldn", len);
_hex2bin(__hex, len, __bin, len / 2);
fwrite(__bin, 1, len/2, fout);
fclose(fout);
return 0;
}
转换后,会生成out.bin文件,把这个out.bin拖到https://lapo.it/asn1js/网址中,也可以转换ASN描述的内容了。
最后
以上就是积极板凳为你收集整理的查看pem证书的ASN数据结构的方法的全部内容,希望文章能够帮你解决查看pem证书的ASN数据结构的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复