#include<iostream>
#include <string>
#include "Base.h" //提供base64转码功能
using namespace std;
#include "cryptlib.h"
int main()
{
cryptInit();
//cryptlib调用前必须执行init,调用完必须执行end
cryptEnd();
return 0;
}
/**
*
*cryptlib产生自签名证书
*
**/
void GenerateKey(){
int* keyset;
keyset = (int*)malloc(sizeof(int*)); //密钥库上下文
int* cryptContext;
cryptContext = (int*)malloc(sizeof(int*)); //加密上下文
int* cryptCertificate;
cryptCertificate = (int*)malloc(sizeof(int*)); //证书上下文
int status = cryptKeysetOpen(keyset,CRYPT_UNUSED, CRYPT_KEYSET_FILE, "D:\\Private key file.p15", CRYPT_KEYOPT_CREATE);//创建密钥库,(CRYPT_KEYOPT_CREATE)
status = cryptCreateContext(cryptContext,CRYPT_UNUSED, CRYPT_ALGO_RSA);//RSA算法的密钥上下文
status = cryptSetAttributeString(*cryptContext, CRYPT_CTXINFO_LABEL, "test1",5);//密钥标签
status = cryptGenerateKey(*cryptContext);
status = cryptAddPrivateKey(*keyset, *cryptContext, "1234");//向密钥库添加私钥
status = cryptCreateCert(cryptCertificate,CRYPT_UNUSED, CRYPT_CERTTYPE_CERTIFICATE);//创建证书
status = cryptSetAttribute(*cryptCertificate, CRYPT_CERTINFO_XYZZY, 1);//设置为简单证书
/* Add the public key and certificate owner name and sign the
certificate with the private key */
status = cryptSetAttribute(*cryptCertificate, CRYPT_CERTINFO_SUBJECTPUBLICKEYINFO, *cryptContext);//证书公钥绑定
status = cryptSetAttributeString(*cryptCertificate, CRYPT_CERTINFO_COMMONNAME, "test1",5);//证书CN
status = cryptSignCert(*cryptCertificate, *cryptContext);//使用私钥自签发证书
status = cryptAddPublicKey(*keyset, *cryptCertificate);//向证书添加公钥
status = cryptDestroyCert(*cryptCertificate);
status = cryptDestroyContext(*cryptContext);
status = cryptKeysetClose(*keyset);
}
/**
*
*从指定密钥库中获取私钥,并签名与验证
*
**/
void signature(){
/*访问密钥库,获取私钥*/
int* keyset;
keyset = (int*)malloc(sizeof(int*));
int* sigKeyContext;
sigKeyContext = (int*)malloc(sizeof(int*));
int status = 0;
status = cryptKeysetOpen(ke