制作证书

// MakeCert.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

DWORD MakeCert();

void log(char *error_msg,int error_num);

int _tmain(int argc, _TCHAR* argv[])

{

int t ;

if( t= MakeCert() != 0)

printf("Error Num:%d",t);

return 0;

}

DWORD MakeCert()

{

HCRYPTPROV hProv;

HCRYPTKEY hKey;

BOOL cret = CryptAcquireContext(&hProv,"LiContainer",MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT );

if( cret == FALSE)

{

cret = CryptAcquireContext(&hProv,"LiContainer",MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_DELETEKEYSET );

cret = CryptAcquireContext(&hProv,"LiContainer",MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_NEWKEYSET );

if(cret == FALSE)

return GetLastError();

}

cret = CryptGenKey( hProv,AT_SIGNATURE, CRYPT_EXPORTABLE , &hKey) ; //|CRYPT_USER_PROTECTED

if(cret == FALSE)

return GetLastError();

CERT_INFO Cert;

memset( (void*)&Cert , 0 ,sizeof( CERT_INFO));

// 1.version

Cert.dwVersion = 2;

// 2.SerialNumber

BYTE SerialNum[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";

Cert.SerialNumber.cbData = 16;

Cert.SerialNumber.pbData = SerialNum;

// 3.Algorithm

Cert.SignatureAlgorithm.pszObjId = szOID_RSA_SHA1RSA;

Cert.SignatureAlgorithm.Parameters.cbData = 0;

// 4.Issuer. Encode the Issuer name with ASN.1 ,reference MSDN source

char *Cert_Issuer_Name ="My Name is LI";

CERT_RDN_ATTR rgNameAttr =

{

szOID_COMMON_NAME, // the OID

CERT_RDN_PRINTABLE_STRING, // type of string

(DWORD)strlen(Cert_Issuer_Name)+1, // string length including

(BYTE *)Cert_Issuer_Name // pointer to the string

};

CERT_RDN rgRDN[] =

{

1, // the number of elements in the array

&rgNameAttr // pointer to the array

};

CERT_NAME_INFO CertName =

{

1, // number of elements in the CERT_RND's array

rgRDN

};

DWORD cbEncoded; // variable to hold the

BYTE *pbEncoded; // variable to hold a pointer to the

cret = CryptEncodeObjectEx( X509_ASN_ENCODING, X509_NAME,

&CertName, 0, NULL, NULL,&cbEncoded) ;

if( cret == NULL)

return GetLastError();

pbEncoded = (BYTE*)malloc(cbEncoded);

if(pbEncoded == NULL)

return GetLastError();

cret =CryptEncodeObjectEx( X509_ASN_ENCODING, X509_NAME,

&CertName, 0, NULL, pbEncoded, &cbEncoded);

if( cret == NULL)

return GetLastError();

Cert.Issuer.cbData = cbEncoded;

Cert.Issuer.pbData = pbEncoded;

// 5.UTCTime .Process the Time of cert. SystemTimeToFileTime

SYSTEMTIME SysTime;

GetSystemTime(&SysTime);

SystemTimeToFileTime( &SysTime , &Cert.NotBefore);

SysTime.wYear += 10;

SystemTimeToFileTime( &SysTime , &Cert.NotAfter);

// 6.subject

char *Cert_Subject_Name ="A Good Day";

rgNameAttr.pszObjId = szOID_COMMON_NAME;

rgNameAttr.dwValueType = CERT_RDN_PRINTABLE_STRING;

rgNameAttr.Value.cbData = (DWORD)strlen(Cert_Subject_Name) +1;

rgNameAttr.Value.pbData = (PBYTE)Cert_Subject_Name;

cret = CryptEncodeObjectEx( X509_ASN_ENCODING, X509_NAME,

&CertName, 0, NULL, NULL,&cbEncoded) ;

if( cret == NULL)

return GetLastError();

pbEncoded = (BYTE*)malloc(cbEncoded);

if(pbEncoded == NULL)

return GetLastError();

cret =CryptEncodeObjectEx( X509_ASN_ENCODING, X509_NAME,

&CertName, 0, NULL, pbEncoded, &cbEncoded);

if( cret == NULL)

return GetLastError();

Cert.Subject.cbData = cbEncoded;

Cert.Subject.pbData = pbEncoded;

// 7.PublicKey

PCERT_PUBLIC_KEY_INFO PubKeyBuf; //reference RACrypt.cpp .Don't know why

DWORD PubKeyLen;

cret = CryptExportPublicKeyInfo( hProv, AT_SIGNATURE,

X509_ASN_ENCODING ,NULL,&PubKeyLen );

if(cret == FALSE )

return GetLastError();

PubKeyBuf = (PCERT_PUBLIC_KEY_INFO) malloc( PubKeyLen);

if( PubKeyBuf == NULL)

return GetLastError();

cret = CryptExportPublicKeyInfo( hProv, AT_SIGNATURE,

X509_ASN_ENCODING ,PubKeyBuf,&PubKeyLen );

if(cret == FALSE )

return GetLastError();

Cert.SubjectPublicKeyInfo = *PubKeyBuf;

// Extendsion

Cert.cExtension = 0;

Cert.rgExtension = NULL;

Cert.IssuerUniqueId.cbData = 0 ;

Cert.SubjectUniqueId.cbData = 0;

//Make Certificate

CRYPT_ALGORITHM_IDENTIFIER algId;

BYTE paraData[16];

paraData[0] = 0x05; paraData[1] = 0x00;

algId.pszObjId = szOID_RSA_SHA1RSA;

algId.Parameters.cbData = 2;

algId.Parameters.pbData = paraData;

/*-------------------------------------------------------------

CryptSignAndEncodeCertificate

The CryptSignAndEncodeCertificate function encodes and signs a certificate, CRL, CTL or certificate request.

This function performs the following operations:

1-> Calls CryptEncodeObject using lpszStructType to encode the "to be signed" information.

2-> Calls CryptSignCertificate to sign this encoded information.

3-> Calls CryptEncodeObject again, with lpszStructType set to X509_CERT,

to further encode the resulting signed, encoded information.

-------------------------------------------------------------*/

// Export As X.509 certificate

PBYTE pCertOut;

DWORD CertLen;

cret = CryptSignAndEncodeCertificate(hProv, AT_SIGNATURE,

X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, (void*)&Cert, &algId,

NULL,NULL, &CertLen);

if(cret == FALSE)

{

printf("CryptSignAndEncodeCertificate Error\n ");

return GetLastError();

}

pCertOut = (PBYTE)malloc(CertLen);

if(CertLen == NULL)

return GetLastError();

cret = CryptSignAndEncodeCertificate(hProv, AT_SIGNATURE,

X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, (void*)&Cert, &algId,

NULL,pCertOut, &CertLen);

if(cret == FALSE)

return GetLastError();

char file[128] = "C:\\Li-X509.cer";

DWORD len;

HANDLE hFile = CreateFile(file ,GENERIC_READ |GENERIC_WRITE,

FILE_SHARE_READ| FILE_SHARE_WRITE,

NULL, CREATE_ALWAYS ,

NULL, NULL);

if(hFile == NULL)

return GetLastError();

cret = WriteFile( hFile,pCertOut,( DWORD)CertLen , &len,NULL);

if( cret == FALSE )

return GetLastError();

cret = CloseHandle( hFile);

if( cret == FALSE)

return GetLastError();

//Export as PKCS#7 certificate

strcpy( file,"C:\\Li-PKCS#7.cer");

hFile = CreateFile(file ,GENERIC_READ |GENERIC_WRITE,

FILE_SHARE_READ| FILE_SHARE_WRITE,

NULL, CREATE_ALWAYS ,

NULL, NULL);

if(hFile == NULL)

return GetLastError();

HCERTSTORE hStore = CertOpenStore( CERT_STORE_PROV_MEMORY, PKCS_7_ASN_ENCODING,hProv,CERT_STORE_OPEN_EXISTING_FLAG, NULL);

if( hStore == NULL)

return GetLastError();

void *pvData = NULL;

DWORD cbData = 0;

cret = CertGetStoreProperty( hStore,CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL, &cbData);

if(cret == FALSE)

return GetLastError();

pvData = malloc(cbData);

if( pvData == NULL)

return GetLastError();

cret = CertGetStoreProperty( hStore, CERT_STORE_LOCALIZED_NAME_PROP_ID,pvData,&cbData) ;

if( cret == FALSE)

return GetLastError();

cret = CertSaveStore( hStore,X509_ASN_ENCODING, CERT_STORE_SAVE_AS_PKCS7, CERT_STORE_SAVE_TO_FILE, hFile,0);

if( cret == FALSE)

return GetLastError();

cret = CloseHandle( hFile);

if( cret == FALSE)

return GetLastError();

free( pCertOut);

free(pbEncoded);

free(PubKeyBuf);

cret = CryptReleaseContext(hProv,0);

if( cret == FALSE)

return GetLastError();

return 0;

}

void log(char *error_msg,int error_num)

{

DWORD dwWrite;

char file[] = "C:\\log.txt";

DWORD FileLen;

char buf[128];

if( error_msg != NULL )

printf("%s ",error_msg);

if( error_num != 0)

printf("Error Num:%d\n",error_num);

HANDLE hFile = CreateFile(file ,GENERIC_READ |GENERIC_WRITE,

FILE_SHARE_READ| FILE_SHARE_WRITE,

NULL, OPEN_EXISTING ,

NULL, NULL);

FileLen = GetFileSize(hFile,NULL);

SetFilePointer( hFile,FileLen , FILE_BEGIN, NULL);

sprintf( buf,"Error Num:%d \r\n",error_num );

WriteFile( hFile,buf,( DWORD)strlen(buf) ,

&dwWrite,NULL);

CloseHandle( hFile) ;

}

c语言的证书,c语言制作证书相关推荐

  1. java 生成证书图片_java生成自定义证书图片1 - 制作证书word模板

    最近做项目遇到一个需求,生成指定数据的证书图片(比如毕业证,在空的模板中输入自定义的姓名.日期等信息),尝试了许多方法,最终完美地实现了这个需求. 以下内容为制作证书图片的第一步,制作证书word模板 ...

  2. c语言省二级编程证书,c语言二级考试

    c语言二级考试[编辑] 概述 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.全国计算机等级考试有二级c语言这个考试的项目. C语言考试要求 1. 熟悉Visual C+ ...

  3. python计算机二级含金量-计算机二级考试哪种语言最难?计算机二级证书含金量高不高?...

    计算机二级考试哪种语言最难?计算机二级证书含金量高不高? 2020-02-2415:17:36 来源:上学吧 作者:qiuyu 计算机二级考试相比于计算机一级考试,难度上会大一些,当然,只要我们认真备 ...

  4. linux java 生成证书_Java 制作证书(Windows 和Linux)

    一.Windows数字证书 1. 生成数字证书 1.1 进入[%JAVA_HOME%]路径下 1 cd D:Program FilesJavajdk1.8.0_131 1.2 生成证书.一些命令中红色 ...

  5. 安卓APP证书Android签名证书.keystore文件制作生成

    将app发布到应用宝时,而上传安装包时提示如下图时, 但您或您的团队从未上传该应用,您可以通过认领功能认领应用.认领成功后该应用会自动转入您的账户下,同时保留应用全部数据,您可以在应用管理中进行管理. ...

  6. 获奖证书如何批量制作

    我们每个人从小到大,在学校接受教育,最高兴的莫过于得到老师的奖励和表扬.这种奖励一般会用颁发奖状的形式来体现,这也是对表现优秀或有进步的学生的一种肯定和激励.那么,该如何制作这样的奖状呢?小编下面就给 ...

  7. Linux easy-rsa制作证书

    我的主页: isfantasy.com 下载配置 下载:yum install easy-rsa -y 将easy-eas拷贝到工作目录(自定义):cp -r /usr/share/easy-rsa/ ...

  8. 使用easyrsa来制作证书

    一.基于easy_rsa 2.x制作证书: 链接:https://blog.51cto.com/wzlinux/1736459  最后附录部分. 下载密钥制作工具easy_rsa 2: wget ht ...

  9. Windows环境下OpenSSL下载安装及制作证书

    下载与安装 点击下载地址,根据自己的系统版本,下载对应的OpenSSL. 下载完成后,对安装包进行安装,比较简单. 打开OpenSSL 直接到安装目录C:\Program Files\OpenSSL- ...

最新文章

  1. TVM代码生成codegen
  2. 选择排序之小白学算法
  3. 在阿里云上以Daemon进程方式运行SAP Cloud Connector portable版本的尝试
  4. 损失函数梯度对比-均方差和交叉熵
  5. 工作160:总结VUE几种页面刷新方法
  6. 开源图数据库项目 DGraph 的前世今生 | 技术头条
  7. javascript 未来新方法的介绍
  8. 一天一个小技巧(2)——CSDN编译器的首行缩进2字符
  9. 【基础教程】信噪比+香农公式【1748期】
  10. 传统方式不同的变态下载(BT)
  11. PHP跨域获取session
  12. 网络安全工作及其配套法律法规和规范性文件汇总目录
  13. 网络技术人员要知道的100个安全工具
  14. 小孩孩子应用题计算机错误,为什么一二年级的孩子数学应用题总出错?家长该怎么办?...
  15. 谈谈一只菜鸟转行Erlang游戏服务端的经历(希望大佬指导,也希望我的经历能给一些还未毕业的同学或者正在迷茫自己工作内容的同学一些感触)
  16. 蓝牙 韦东山_韦东山生活实例演绎法讲解蓝牙
  17. Ubuntu设置清华源
  18. 战地4服务器物理地址,战地4 游戏服务器地址
  19. 数据库关于事务的详解分析(全)包含面试常问的细节
  20. 从零实现简易播放器:4.ffmpeg 解码视频为yuv数据-使用avcodec_send_packet与avcodec_receive_frame

热门文章

  1. 计算机素质教育模式创新,创新教育方法是素质教育的关键.doc
  2. 智能计算机辅助教学的定义,什么是智能计算机辅助教学,它与计算机辅助教学的本质区别...
  3. Wi-Fi主要问题简要叙述
  4. 小程序源码:(更新)云开发微群人脉
  5. 计算机忽然打开东西特别慢,“我的电脑”中文件打开很慢的解决方案
  6. ArcGI Server+GP服务完成最短路径分析(实践经验)
  7. css 图片上使用position定位图片,缩小屏幕 图片会跑(已解决)
  8. PHP以星号隐藏用户名手机号码和邮箱实例
  9. 服装MES行业知识积累
  10. 王权富贵:pycharm安装第三方库