C++获取数字证书的序列号
2015-11-06 17:30
731 查看
C++获取数字证书的序列号
目录
C获取数字证书的序列号目录
举个证书序列号的栗子
以下是一个简单的例子
转载请声明本文作者为天空中一米阳光
我们需要准备一个二进制的证书实体 或是 CRL,给出的例子可以直接解析出证书的序列号,而不需要通过任何的第三方的接口例如:openssl 、CryptoAPI
通过看ASN.1 得知:
INTEGER 为任意一个整数 该标记码为 0x02
asn.1这规范一般标记码后面是 长度
了解到证书的序列号的长度为 32字节 的十六进制的字符串
二进制的长度为16字节
举个证书序列号的栗子:
序列号 : 21 11 78 53 0b 64 aa 92 13 45 59 cd 49 f4 d8 c1以下是一个简单的例子
/* @作者:天空中的一米阳光 @由于我的环境是VS 2010 故用了fopen_s方法和sprintf_s方法 */ #include<iostream> #include<string> using namespace std; int main() { FILE *fp = NULL; int iDataLen = 0; unsigned char* crlData = NULL; errno_t err; //这里我是用的CRL ,用.cer的证书实体也是一样的 err = fopen_s(&fp,"crl.crl","rb+"); if (err!=0) { cout<<"File wasn't opened"<<endl; return -1; } fseek(fp,0L,SEEK_END); iDataLen = ftell(fp); //获取文件的大小 fseek(fp,0L,SEEK_SET); crlData = new unsigned char[iDataLen+1]; memset(crlData,0x00,iDataLen+1); fread(crlData,sizeof(unsigned char),iDataLen,fp); int iCount = 0; int i = 0; iCount = iDataLen; for ( i = 0;i<iDataLen;i++) { if (crlData[i]==2) { if (crlData[i+1]==16) { string strNum; for (int j = 0;j<16;j++) { char str[3] = {0}; sprintf_s(str,3,"%02x",crlData[i+2]);//将二进制的数据转变为十六进制的字符串 strNum += str; i++; } cout<<strNum<<endl; }else{ continue; } } } fclose(fp); delete[] crlData; crlData = NULL; return 0; }
转载请声明本文作者为:天空中一米阳光
相关文章推荐
- 一起用C++写个轻量的搜索引擎(一)
- C++学习:模板类学习
- C语言:浮点数在内存中的表示
- c++ inline
- C语言文件与目录(五)移动与复制
- C++进阶学习——单向链表的实现
- 用C语言实现对冗余层发送的数据包进行过滤判断处理
- C++中的友元
- STL容器之map与hash_map
- Ackerman的递归与非递归算法
- C++ explicit关键字
- Java与C/C++互调用法(JNI调用第三方库)
- c#调用C++DLL参数对应
- C++ STL容器的理解
- C++ 学习小程序之 map 的用法
- [leetcode][C++]Find Median from Data Stream
- Leap Motion自带Sample之详解_Win/C++版本
- C语言练习作业(一)
- MFC 初步:写一个带窗口的Windows程序
- c++ ui 库