当前位置: 代码迷 >> C语言 >> [求助]一道c难题
  详细解决方案

[求助]一道c难题

热度:424   发布时间:2006-09-12 11:34:41.0
[求助]一道c难题


程序要求如下:

1. 从IE任意导出一个X.509证书(DER格式,Base64格式,PKCS#7格式均可)
2. 编程实现该证书的解析,结果可以与asn1view工具对比
3. 得到证书中的公钥信息
4. 输入输出可以使用文本界面或者图形界面
5. 程序不能都放到一个源文件中(比如,c语言至少有俩个源文件,一个头文件)



#include<stdio.h>

void main()
{
void file1();

void file2();

file1();

file2();
}
/************************************************/
void file1() /*输出公约函数*/
{
FILE *fp;

int i;

char A[300];

if((fp=fopen("043220.cer","rb"))==NULL)
{
printf("can not open the file\n");

return;
} /*打开文件*/

fseek(fp,223l,0); /*把文件指针指向公约的起始位置*/

fread(A,271,1,fp); /*将公约的内容读入到数组中*/

printf("the gongyue is:\n");

for(i=0;i<=270;i++)
{
printf("%x",A[i]);

if(i%5==0)

printf("\n");

} /*输出数组即公约内容*/

printf("\n");

fclose(fp); /*关闭文件*/
}
/***************************************************/
void file2()
{
FILE *fp;

int i;

char B[650];

if((fp=fopen("043220.cer","rb"))==NULL)
{
printf("can not open the file\n");

return;
} /*打开文件*/

fseek(fp,8l,0);

fread(B,611,1,fp);

printf("the first stage is:\n");

for(i=0;i<=610;i++)
{
printf("%x",B[i]);

if(i%5==0)printf("\n");

} /*输出的一段*/

printf("\n");

fseek(fp,2,1);

fread(B,13,1,fp);

printf("the second stage is:\n");

for(i=0;i<=12;i++)
{
printf("%x",B[i]);

if(i%5==0)

printf("\n");

} /*输出第二段*/

printf("\n");

fseek(fp,4l,1);

fread(B,257,1,fp);

printf("the third stage is:\n");

for(i=0;i<=256;i++)
{
printf("%x",B[i]);

if(i%5==0)

printf("\n");

} /*输出第三段*/

fclose(fp);

}
/**********************************************************/


这只是其中一个特例,要求是任意一个x.509证书文件


----------------解决方案--------------------------------------------------------
  相关解决方案