欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

查看pem证书的ASN数据结构的方法

发布时间:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 查看pem证书的ASN数据结构的方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

搞过的同学应该都弄过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 %ld\n", 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数据结构的方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。