HCRYPTPROV hCryptProv;
HCRYPTPROV hCryptHash;
HCRYPTPROV hCryptKey;
char *passwd="950420";
CryptAcquireContext( &hCryptProv, NULL, NULL, PROV_RSA_AES, 0); //获取CSP句柄
//创建一个会话密钥(session key),会话密钥也叫对称密钥
// 一个Session是指从调用函数CryptAcquireContext到调用函数CryptReleaseContext 期间的阶段。
//会话密钥只能存在于一个会话过程
CryptCreateHash(hCryptProv,CALG_MD5,0,0,&hCryptHash); //创建hash对象
static char szHash[]="950420"; //解密口令
DWORD dwLen=strlen(szHash);
CryptHashData(hCryptProv,(BYTE *)szHash,dwLen,0); 用输入的口令作哈稀散列
CryptDeriveKey(hCryptProv,CALG_AES_128,hCryptHash,CRYPT_EXPORTABLE,&hCryptKey); //用哈稀散列生成会话密钥
char szEntry[MAX_LEN]="ssssdf沈雪冰41115115348&&**&%%";
DWORD dwLenIn=strlen(szEntry)+1; //输入长度
DWORD dwLenOut=dwLenIn; //输出加密的长度
CryptEncrypt(hCryptKey,0,TRUE,0,(BYTE *)szEntry,&dwLenOut,MAX_LEN); //第三个参数TRUE 如果数据同时进行散列和加密,这里传入一个散列对象
printf("------:%s\n",szEntry);
printf("------:%d\n",dwLenOut);
CryptDecrypt(hCryptKey,0,TRUE,0,(BYTE *)szEntry,&dwLenOut); //解密
printf("------:%s\n",szEntry);
printf("------:%d\n",dwLenOut);
CryptDestroyKey(hCryptKey);
CryptDestroyHash(hCryptHash);
CryptReleaseContext(hCryptProv,NULL);
CSP应用开发-数据加解密
最新推荐文章于 2022-11-19 16:27:17 发布