您好,欢迎访问三七文档
CSP接口函数介绍(转)(2012-05-0715:21:30)标签:it分类:csp1.CSP接口说明1.1CSP连接函数CSP连接函数包括以下函数:CPAcquireContext获得CSP的指定密钥容器的句柄CPReleaseContext释放由CPAcquireContext得到的句柄CPGetProvParam得到CSP的属性CPSetProvParam设置CSP的属性1.2密钥的产生和交换函数密钥产生函数创建、配置和销毁加密密钥。他们也用于和其他用户进行交换密钥。下面就是主要的一些函数:CPDeriveKey从一个密码中派生一个密钥CPDestoryKey销毁密钥CPDuplicateKey制作一个密钥和密钥状态的精确复制CPExportKey把密钥做成BLOB输出CPGenKey创建一个随机密钥CPGenRandom产生一个随机数CPGetKeyParam得到密钥的参数CPGetUserKey得到一个密钥交换或签名密钥的句柄CPImportKey把一个密钥BLOB传送到CSP中CPSetKeyParam指定一个密钥的参数1.3数据加密/解密函数这些函数支持数据的加密/解密操作。CPEncrypt和CPDecrypt要求在被调用前指定一个密钥。这个密钥可以由CPGenKey、CPDeriveKey或CPImportKey产生。创建密钥时要指定加密算法。CPSetKeyParam函数可以指定额外的加密参数。CPDecrypt使用指定加密密钥来解密一段密文CPEncrypt使用指定加密密钥来加密一段明文1.4哈希和数字签名函数这些函数在完成计算哈希、创建和校验数字签名。CPCreateHash创建一个空哈希对象CPDestoryHash销毁一个哈希对象CPDuplicateHash复制一个哈希对象CPGetHashParam得到一个哈希对象参数CPHashData对一块数据进行哈希,把它加到指定的哈希对象中CPHashSessionKey对一个会话密钥进行哈希,把它加到指定的哈希对象中CPSetHashParam设置一个哈希对象的参数CPSignHash对一个哈希对象进行签名CPVerifySignature校验一个数字签名1.5函数详解1.5.1CPAcquireContextBOOLCPAcquireContext(HCRYPTPROV*phProv,//outCHAR*pszContainer,//inDWORDdwFlags,//inPVTableProvStrucpVTable//in);参数:phProv[out]CSP句柄指针pszContainer[in]密钥容器名称,指向密钥容器的字符串指针。如果dwFlags为CRYPT_VERIFYCONTEXT,pszContainer必须为NULL。dwFlags[in]标志。CRYPT_VERIFYCONTEXT此选项指出应用程序不需要使用公钥/私钥对,如程序只执行哈希和对称加密。只有程序需要创建签名和解密消息时才需要访问私钥。CRYPT_NEWKEYSET使用指定的密钥容器名称创建一个新的密钥容器。如果pszContainer为NULL,密钥容器就使用却省的名称创建。CRYPT_MACHINE_KEYSET由此标志创建的密钥容器只能由创建者本人或有系统管理员身份的人使用。CRYPT_DELETEKEYSET删除由pszContainer指定的密钥容器。如果pszContainer为NULL,却省名称的容器就会被删除。此容器里的所有密钥对也会被删除。CRYPT_SLIENT应用程序要求CSP不显示任何用户界面。说明:这个函数是用来取得CSP密钥容器句柄,以后的任何加密操作就是针对此句柄而言。由适当的dwFlags标志,这个函数就可以创建和销毁密钥容器。1.5.2CPReleaseContextBOOLCPReleaseContext(HCRYPTPROVhProv,//inDWORDdwFlags//in);参数:hProv[in]由CPAcquireContext获得的CSP句柄。dwFlags[in]保留。必须为0。说明:此函数释放CSP的句柄。3CPGetProvParamBOOLCPGetProvParam(HCRYPTPROVhProv,//inDWORDdwParam,//inBYTE*pbData,//outDWORD*pdwDataLen,//in,outDWORDdwFlags//in);参数:hProv[in]CSP句柄。dwParam[in]指定查询的参数。PP_CONTAINER指向密钥名称的字符串PP_ENUMALGS不断的读出CSP支持的所有算法PP_ENUMALGS_EX比PP_ENUMALGS获得更多的算法信息PP_ENUMCONTAINERS不断的读出CSP支持的密钥容器PP_IMPTYPE指出CSP怎样实现的PP_NAME指向CSP名称的字符串PP_VERSIONCSP的版本号PP_KEYSIZE_INCAT_SIGNATURE的位数PP_KEYX_KEYSIZE_INCAT_KEYEXCHANGE的位数PP_KEYSET_SEC_DESCR密钥的安全描述符PP_UNIQUE_CONTAINER当前密钥容器的唯一名称PP_PROVTYPECSP类型PP_USE_HARDWARE_RNG指出硬件是否支持随机数发生器PP_KEYSPEC返回CSP密钥的信息pbData[out]指向接收数据的缓冲区指针。pdwDataLen[in/out]指出pbData数据长度。dwFlags[in]根据dwParam不同设定不同值。说明:此函数获得CSP的各种参数。1.5.4CPSetProvParamBOOLCPSetProvParam(HCRYPTPROVhProv,//inDWORDdwParam,//inBYTE*pbData,//inDWORDdwFlags//in);参数:hProv[in]CSP句柄。dwParam[in]指定查询的参数。pbData[out]指向接收数据的缓冲区指针。dwFlags[in][in]根据dwParam不同设定不同值。说明:此函数设置CSP的各种参数。1.5.5CPDeriveKeyBOOLCPDeriveKey(HCRYPTPROVhProv,//inALG_IDAlgid,//inHCRYPTHASHhBaseData,//inDWORDdwFlags,//inHCRYPTKEY*phKey//out);hProv[in]CSP句柄Algid[in]要产生密钥的对称加密算法hBaseData[in]哈希对象的句柄dwFlags[in]指定密钥的类型CRYPT_CREATE_SALT典型地,由哈希值产生一个会话密钥,有一些需要补位。如果用此标志,密钥将会赋予一个盐值CRYPT_EXPORTABLE如果置此标志,密钥就可以用CryptExportKey函数导出。CRYPT_NO_SALT如果置此标志,表示40位的密钥不需要分配盐值。CRYPT_UPDATE_KEY有些CSP从多个哈希值中派生会话密钥。如果这种情况,CryptDeriveKey需要多次调用。phKey[in/out]密钥的句柄说明:此函数从一基本数据值中派生会话密钥。函数保证当CSP和算法相同时,从相同基本数据值中产生的密钥是唯一的。1.5.6CPDestoryKeyBOOLCPDestroyKey(HCRYPTPROVhProv,//inHCRYPTKEYhKey//in);参数:hProv[in]CSP句柄hKey[in]需要销毁的密钥句柄说明:此函数释放密钥句柄。1.5.7CPDuplicateKeyBOOLCPDuplicateKey(HCRYPTPROVhUID,//inHCRYPTKEYhKey,//inDWORD*pdwReserved,//inDWORDdwFlags,//inHCRYPTKEY*phKey//out);参数:hUID[in]CSP句柄hKey[in]源密钥句柄pdwReserved[in]保留,必须为NULLdwFlags[in]保留,必须为0phKey[out]目标密钥句柄说明:目标密钥是源密钥的一个精确复制。1.5.8CPExportKeyBOOLCPExportKey(HCRYPTPROVhProv,//inHCRYPTKEYhKey,//inHCRYPTKEYhPubKey,//inDWORDdwBlobType,//inDWORDdwFlags,//inBYTE*pbData,//outDWORD*pdwDataLen//in,out);参数:hUID[in]CSP句柄hKey[in]被导出的密钥hPubKey[in]用来加密的公钥句柄dwBlobType[in]导出KEYBLOB的类型SIMPLEBLOB表示导出的是对称密钥,密钥用hPubKey指定的公钥加密PUBLICKEYBLOB表示导出的是hKey指定的公钥,此时hPubKey应该为0PRIVATEKEYBLOB表示导出的是hKey指定的密钥对,此时hPubKey应该为0dwFlags[in]保留,必须为0pbData[in/out]导出KEYBLOB的地址pdwDataLen[in/out]指向DWORD值的指针,此值指出导出KEYBLOB的长度。在调用此函数前,此值为pbData缓冲区长度,调用此函数后,此值为导出KEYBLOB的长度。说明:把密钥以KEYBLOB形式导出。1.5.9CPGenKeyBOOLCPGenKey(HCRYPTPROVhProv,//inALG_IDAlgid,//inDWORDdwFlags,//inHCRYPTKEY*phKey//out);参数:hProv[in]CSP句柄Algid[in]要产生密钥的算法,可以是对称密钥,也可以是非对称密钥对dwFlags[in]指定密钥的属性CRYPT_CREATE_SALT典型地,由哈希值产生一个会话密钥,有一些需要补位。如果用此标志,密钥将会赋予一个盐值CRYPT_EXPORTABLE如果置此标志,密钥就可以用CryptExportKey函数导出。CRYPT_NO_SALT如果置此标志,表示40位的密钥不需要分配盐值。phKey[in]产生的密钥句柄说明:根据算法和属性产生密钥。1.5.10CPGenRandomBOOLCPGenRandom(HCRYPTPROVhProv,//inDWORDdwLen,//inBYTE*pbBuffer//in,out);参数:hProv[in]CSP句柄dwLen[in]需要产生的随机数长度pbBuffer[in]随机数的缓冲区说明:根据指定长度产生随机数1.5.11CPGetKeyParamBOOLCPGetKeyParam(HCRYPTPROVhProv,//inHCRYPTKEYhKey,//inDWORDdwParam,//inBYTE*pbData,//outDWORD*pdwDataLen,//in,outDWORDdwFlags//in);hProv[in]CSP句柄。hKey[in]密钥句柄。dwParam[in]指定查询的参数。KP_ALGID表示返回密钥的算法标识KP_BLOCKLEN表示返回密钥的算法数据块长度KP_KEYLEN表示返回密钥的长度KP_SALT表示返回密钥的盐值KP_PERMISSIONS表示返回密钥的访问权限KP_IV表示返回算法的初始向量KP_PADDING表示返回算法的填充方式KP_MODE表示返回算法的加密模式KP_MODE_BITS表示返回算法的加密模式的反馈位数KP_EFFECTIVE_KEYLEN表示返回密钥的有效长度pbData[out]指向接收数据的缓冲区指针。pdwDataLen[in/out]指出pbData数据长度。dwFlags[in]根据dwParam不同设定不同值。说明:此函数获得密钥的各种参数。1.5.12CPGetUserKey
本文标题:CSP接口说明
链接地址:https://www.777doc.com/doc-2907735 .html