资源简介
纯属上级考验,自己下的asn代码查看器,网上找的标准,
和x509证书编码规则
代码片段和文件信息
#include “stdio.h“
#include “iostream.h“
#include “string“
#include “math.h“
using namespace std;
enum classification
{
universal
application
context_specific
privateclass
};
enum constructed
{
simplecon
constructed
};
//程序中未使用
enum type
{
boolean=1 //[有两个值:false或true]
interger //[整型值]
BitString //[0位或多位]
OctetString//[0字节或多字节]
null
ObejectIdentifier //[相应于一个对象的独特标识数字]
objectDescriptor //[一个对象的简称]
External// [ASN.1没有定义的数据类型]
Real//[实数值]
Enumerated//[数值列表,这些数据每个都有独特的标识符,作为ASN.1定义数据类型的一部分]
UTF8String
Relative_oid
Sequence//[有序数列,SEQUENCE里面的每个数值都可以是不同类型的,而SEQUENCE OF里是0个或多个类型相同的数据]
Set // [无序数列,SET里面的每个数值都可以是不同类型的,而SET OF里是0个或多个类型相同的数据]
NumericString//[0-9以及空格]
PrintableString//[A-Z、a-z、0-9、空格以及符号‘()+-./:=?]
TeletexString//T61String
VideotexString
IA5String
UTCTime //[统一全球时间格式]
GeneralizedTime
GraphicString
VisibleString //ISO646String
GeneralString
UniversalString
CharaterString
BMPString
reserved
version
issuerUniqueID
subjectUniqueID
external
};
int gettype(FILE* cfile )
{
//取byte第87位数值判断 classification
unsigned char byte =fgetc(cfile);
int theclass=0thetype=0;
theclass=byte>>6;
thetype=(byte&31);
if(context_specific==theclass)
{
return 32+thetype;
}
else
{
return thetype;
}
}
bool IsMulti(unsigned char byte)
{
return (bool)(byte>>7);
}
int getSignlength(unsigned char byte)
{
return byte&127;
}
int ConvertByteToNum(unsigned char* pByteint len)
{
int i=0 tmp result=0;
for(i=0;i {
tmp=pByte[len-i-1]*pow(256i);
result+=tmp;
}
return result;
}
int getLength(FILE* cfile)
{
unsigned char byte =fgetc(cfile);
int len=getSignlength(byte);
if(IsMulti(byte))
{
unsigned char* pByte=new unsigned char[len];
fread(pByte1lencfile);
len=ConvertByteToNum(pBytelen);
delete pByte;
return len;
}
else
{
return len;
}
}
void getTypeandLen(FILE* cfileint& thetypeint& len)
{
thetype=gettype(cfile);
len=getLength(cfile);
}
void getversion(int ver)
{
if(0x00==ver)
{cout<<“证书版本为:v1“< else if(0x01==ver)
{cout<<“证书版本为:v2“< else if(0x02==ver)
{cout<<“证书版本为:v3“< }
#define MAX_LEN 10000
#define MAX_PATH 256
void main()
{
FILE* cfile;
char strpath[MAX_PATH];
cin>>strpath;
cfile=fopen(strpath“rb+“);
if(cfile==NULL)
{
cout<<“open cert fail“< return;
}
int thetype=0tmpint=-1len=0;
int namelen=0;
unsigned char* pByte=NULL;
//获取证书长度字节
getTypeandLen(cfilethetypelen);
cout<<“证书长度为:“< //获取证书主体长度字节
getTypeandLen(cfilethetypelen);
cout<<“证书主体长度为:“< //获取版本号
getTypeandLen(cfilethetypelen);
if(32==thetype)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1620 2010-11-30 13:56 x.509证书取公钥\ABC.pfx
文件 692 2012-01-30 17:22 x.509证书取公钥\Debug\My.cer
文件 279552 2012-02-21 12:33 x.509证书取公钥\Debug\test.bsc
文件 241719 2012-02-21 12:33 x.509证书取公钥\Debug\test.exe
文件 315212 2012-02-21 12:33 x.509证书取公钥\Debug\test.ilk
文件 19549 2012-02-21 12:33 x.509证书取公钥\Debug\test.obj
文件 2259832 2012-02-21 12:29 x.509证书取公钥\Debug\test.pch
文件 582656 2012-02-21 12:33 x.509证书取公钥\Debug\test.pdb
文件 0 2012-02-21 12:33 x.509证书取公钥\Debug\test.sbr
文件 7168 2012-02-02 09:08 x.509证书取公钥\Debug\test.suo
文件 82944 2012-02-21 12:33 x.509证书取公钥\Debug\vc60.idb
文件 110592 2012-02-21 12:33 x.509证书取公钥\Debug\vc60.pdb
文件 692 2012-01-30 17:22 x.509证书取公钥\My.cer
文件 4519 2012-02-21 12:33 x.509证书取公钥\test.cpp
文件 3381 2012-02-02 09:04 x.509证书取公钥\test.dsp
文件 516 2012-02-01 17:01 x.509证书取公钥\test.dsw
文件 41984 2012-02-27 17:13 x.509证书取公钥\test.ncb
文件 48640 2012-02-27 17:13 x.509证书取公钥\test.opt
文件 1372 2012-02-21 12:33 x.509证书取公钥\test.plg
文件 656 2012-02-02 15:01 x.509证书取公钥\xx.cer
目录 0 2012-02-21 12:33 x.509证书取公钥\Debug
目录 0 2012-02-27 17:13 x.509证书取公钥
----------- --------- ---------- ----- ----
4003296 22
- 上一篇:利用回溯法解决迷宫问题
- 下一篇:数据结构二叉树代码
评论
共有 条评论