您的位置:首页 > 其它

CSP接口函数介绍

2012-04-24 12:55 274 查看



1. 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.1CPAcquireContext

BOOL CPAcquireContext(

HCRYPTPROV *phProv, // out

CHAR *pszContainer, // in

DWORD dwFlags, // in

PVTableProvStruc pVTable // 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.2CPReleaseContext

BOOL CPReleaseContext(

HCRYPTPROV hProv, // in

DWORD dwFlags // in

);

参数:

hProv

[in]由CPAcquireContext 获得的CSP 句柄。

dwFlags

[in]保留。必须为0。

说明:

此函数释放CSP 的句柄。


3CPGetProvParam

BOOL CPGetProvParam(

HCRYPTPROV hProv, // in

DWORD dwParam, // in

BYTE *pbData, // out

DWORD *pdwDataLen, // in, out

DWORD dwFlags // 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_VERSION CSP 的版本号

PP_KEYSIZE_INC AT_SIGNATURE 的位数

PP_KEYX_KEYSIZE_INC AT_KEYEXCHANGE 的位数

PP_KEYSET_SEC_DESCR 密钥的安全描述符

PP_UNIQUE_CONTAINER 当前密钥容器的唯一名称

PP_PROVTYPE CSP 类型

PP_USE_HARDWARE_RNG 指出硬件是否支持随机数发生器

PP_KEYSPEC 返回CSP 密钥的信息

pbData

[out]指向接收数据的缓冲区指针。

pdwDataLen

[in/out]指出pbData 数据长度。

dwFlags

[in] 根据dwParam不同设定不同值。

说明:

此函数获得CSP 的各种参数。


1.5.4CPSetProvParam

BOOL CPSetProvParam(

HCRYPTPROV hProv, // in

DWORD dwParam, // in

BYTE *pbData, // in

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

dwParam

[in]指定查询的参数。

pbData

[out]指向接收数据的缓冲区指针。

dwFlags

[in] [in] 根据dwParam不同设定不同值。

说明:

此函数设置CSP 的各种参数。


1.5.5CPDeriveKey

BOOL CPDeriveKey(

HCRYPTPROV hProv, // in

ALG_ID Algid, // in

HCRYPTHASH hBaseData, // in

DWORD dwFlags, // in

HCRYPTKEY *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.6CPDestoryKey

BOOL CPDestroyKey(

HCRYPTPROV hProv, // in

HCRYPTKEY hKey // in

);

参数:

hProv

[in]CSP 句柄

hKey

[in]需要销毁的密钥句柄

说明:

此函数释放密钥句柄。


1.5.7CPDuplicateKey

BOOL CPDuplicateKey(

HCRYPTPROV hUID, // in

HCRYPTKEY hKey, // in

DWORD *pdwReserved, // in

DWORD dwFlags, // in

HCRYPTKEY *phKey // out

);

参数:

hUID

[in]CSP 句柄

hKey

[in]源密钥句柄

pdwReserved

[in]保留,必须为NULL

dwFlags

[in] 保留,必须为0

phKey

[out]目标密钥句柄

说明:

目标密钥是源密钥的一个精确复制。


1.5.8CPExportKey

BOOL CPExportKey(

HCRYPTPROV hProv, // in

HCRYPTKEY hKey, // in

HCRYPTKEY hPubKey, // in

DWORD dwBlobType, // in

DWORD dwFlags, // in

BYTE *pbData, // out

DWORD *pdwDataLen // in, out

);

参数:

hUID

[in]CSP 句柄

hKey

[in]被导出的密钥

hPubKey

[in]用来加密的公钥句柄

dwBlobType

[in]导出KEY BLOB的类型

SIMPLEBLOB表示导出的是对称密钥,密钥用hPubKey指定的公钥加密

PUBLICKEYBLOB表示导出的是hKey指定的公钥,此时hPubKey应该为0

PRIVATEKEYBLOB表示导出的是hKey指定的密钥对,此时hPubKey应该为0

dwFlags

[in] 保留,必须为0

pbData

[in/out]导出KEY BLOB的地址

pdwDataLen

[in/out]指向DWORD 值的指针,此值指出导出KEY BLOB的长度。在调用此函数前,此值为pbData缓冲区长度,调用此函数后,此值为导出KEY BLOB的长度。

说明:

把密钥以KEY BLOB形式导出。


1.5.9CPGenKey

BOOL CPGenKey(

HCRYPTPROV hProv, // in

ALG_ID Algid, // in

DWORD dwFlags, // in

HCRYPTKEY *phKey // out

);

参数:

hProv

[in]CSP 句柄

Algid

[in]要产生密钥的算法,可以是对称密钥,也可以是非对称密钥对

dwFlags

[in]指定密钥的属性

CRYPT_CREATE_SALT 典型地,由哈希值产生一个会话密钥,有一些需要补位。如果用此标志,密钥将会赋予一个盐值CRYPT_EXPORTABLE 如果置此标志,密钥就可以用CryptExportKey函数导出。

CRYPT_NO_SALT 如果置此标志,表示40 位的密钥不需要分配盐值。

phKey

[in]产生的密钥句柄

说明:

根据算法和属性产生密钥。


1.5.10CPGenRandom

BOOL CPGenRandom(

HCRYPTPROV hProv, // in

DWORD dwLen, // in

BYTE *pbBuffer // in, out

);

参数:

hProv

[in]CSP 句柄

dwLen

[in]需要产生的随机数长度

pbBuffer

[in]随机数的缓冲区

说明:

根据指定长度产生随机数


1.5.11CPGetKeyParam

BOOL CPGetKeyParam(

HCRYPTPROV hProv, // in

HCRYPTKEY hKey, // in

DWORD dwParam, // in

BYTE *pbData, // out

DWORD *pdwDataLen, // in, out

DWORD dwFlags // 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

BOOL CPGetUserKey(

HCRYPTPROV hProv, // in

DWORD dwKeySpec, // in

HCRYPTKEY *phUserKey // out

);

hProv

[in]CSP 句柄

dwKeySpec

[in]密钥对属性

phUserKey

[out]密钥的句柄

说明:

此函数根据得到dwKeySpec获得密钥对句柄。


1.5.13CPImportKey

BOOL CPImportKey(

HCRYPTPROV hProv, // in

CONST BYTE *pbData, // in

DWORD dwDataLen, // in

HCRYPTKEY hPubKey, // in

DWORD dwFlags, // in

HCRYPTKEY *phKey // out

);

参数:

hProv

[in]CSP 句柄

pbData

[in]导出KEY BLOB的地址

dwDataLen

[in]导入KEY BLOB的长度。。

hPubKey

[in]用来加密的公钥句柄

dwFlags

[in] 保留,必须为0

phKey

[out]导入的密钥句柄

说明:

把KEY BLOB导入CSP中。


1.5.14CPSetKeyParam

BOOL CPSetKeyParam(

HCRYPTPROV hProv, // in

HCRYPTKEY hKey, // in

DWORD dwParam, // in

BYTE *pbData, // in

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

hKey

[in]密钥句柄。

dwParam

[in]指定查询的参数。

KP_SALT 表示返回密钥的盐值

KP_PERMISSIONS 表示返回密钥的访问权限

KP_IV表示返回算法的初始向量

KP_PADDING 表示返回算法的填充方式

KP_MODE 表示返回算法的加密模式

KP_MODE_BITS表示返回算法的加密模式的反馈位数

KP_EFFECTIVE_KEYLEN 表示返回密钥的有效长度

pbData

[in]指向接收数据的缓冲区指针。

dwFlags

[in] 根据dwParam不同设定不同值。

说明:

此函数设置密钥的各种参数。


1.5.15CPDecrypt

BOOL CPDecrypt(

HCRYPTPROV hProv, // in

HCRYPTKEY hKey, // in

HCRYPTHASH hHash, // in

BOOL Final, // in

DWORD dwFlags, // in

BYTE *pbData, // in, out

DWORD *pdwDataLen // in, out

);

参数:

hProv

[in]CSP 句柄

hKey

[in]解密密钥的句柄

hHash

[in]哈希对象的句柄。如果需要解密数据并且同时作哈希,hHash 传递此参数。

Final

[in]指出是否是最后一次解密操作。

dwFlags

[in]保留

pbData

[in/out]需要解密数据的地址

pdwDataLen

[in/out]指向DWORD 值的指针,此值指出解密数据的长度。在调用此函数前,此值为需要解密数据的长度,调用此函数后,此值为已经解密的数据长度。此函数对由CryptEncrypt 加密过的数据进行解密。


1.5.16CPEncrypt

BOOL CPEncrypt(

HCRYPTPROV hProv, // in

HCRYPTKEY hKey, // in

HCRYPTHASH hHash, // in

BOOL Final, // in

DWORD dwFlags, // in

BYTE *pbData, // in, out

DWORD *pdwDataLen, // in, out

DWORD dwBufLen // in

);

参数:

hProv

[in]CSP 句柄

hKey

[in]加密密钥的句柄

hHash

[in]哈希对象的句柄。如果需要加密数据并且同时作哈希,hHash 传递此参数。

Final

[in]指出是否是最后一次加密操作。

dwFlags

[in]保留

pbData

[in/out]需要加密数据的地址

pdwDataLen

[in/out]指向DWORD 值的指针,此值指出加密数据的长度。在调用此函数前,此值为需要加密数据的长度,调用此函数后,此值为已经加密的数据长度。


1.5.17CPCreateHash

BOOL CPCreateHash(

HCRYPTPROV hProv, // in

ALG_ID Algid, // in

HCRYPTKEY hKey, // in

DWORD dwFlags, // in

HCRYPTHASH *phHash // out

);

参数:

hProv

[in]CSP 句柄

Algid

[in]要产生密钥的算法,可以是对称密钥,也可以是非对称密钥对

hKey

[in]密钥句柄

dwFlags

[in]保留,设为0。

phHash

[in]产生的哈希句柄

说明:

根据算法创建哈希句柄。


1.5.18CPDestoryHash

BOOL CPDestroyHash(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash // in

);

参数:

hProv

[in]CSP 句柄

hHash

[in]哈希句柄

说明:

销毁哈希句柄。


1.5.19CPDuplicateHash

BOOL CPDuplicateHash(

HCRYPTPROV hUID, // in

HCRYPTHASH hHash, // in

DWORD *pdwReserved, // in

DWORD dwFlags, // in

HCRYPTHASH *phHash // out

);

参数:

hUID

[in]CSP 句柄

hHash

[in]源哈希句柄

pdwReserved

[in]保留,必须为NULL

dwFlags

[in] 保留,必须为0

phHash

[out]目标哈希句柄

说明:

目标哈希是源哈希的一个精确复制。


1.5.20CPGetHashParam

BOOL CPGetHashParam(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash, // in

DWORD dwParam, // in

BYTE *pbData, // out

DWORD *pdwDataLen, // in, out

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

hHash

[in]哈希句柄。

dwParam

[in]指定查询的参数。

HP_ALGID 表示返回哈希算法标识

HP_HASHSIZE表示返回哈希值长度

HP_HASHVALUE表示返回哈希值

pbData

[out]指向接收数据的缓冲区指针。

pdwDataLen

[in/out]指出pbData 数据长度。

dwFlags

[in]没有定义,设为0。

说明:

此函数获得哈希句柄的各种参数。


1.5.21CPHashData

BOOL CPHashData(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash, // in

CONST BYTE *pbData, // in

DWORD dwDataLen, // in

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

hHash

[in]哈希句柄。

pbData

[in]指向填充数据的缓冲区指针。

dwDataLen

[in]填充数据长度。

dwFlags

[in]特殊定义。

说明:

此函数往哈希句柄填充数据。


1.5.22CPHashSessionKey

BOOL CPHashSessionKey(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash, // in

HCRYPTKEY hKey, // in

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

hHash

[in]哈希句柄。

hKey

[in]填充到哈希对象中的密钥句柄。

dwFlags

[in]特殊定义。

CRYPT_LITTLE_ENDIAN表示密钥值的填充顺序。

说明:

此函数往哈希句柄填充数据。


1.5.23CPSetHashParam

BOOL CPSetHashParam(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash, // in

DWORD dwParam, // in

BYTE *pbData, // in

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

hHash

[in]哈希句柄。

dwParam

[in]指定设置的参数。

HP_HASHVALUE表示返回哈希值

pbData

[in]指向接收数据的缓冲区指针。

dwFlags

[in]没有定义,设为0。

说明:

此函数设置哈希句柄的各种参数。


1.5.24CPSignHash

BOOL CPSignHash(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash, // in

DWORD dwKeySpec, // in

LPCWSTR sDescription, // in

DWORD dwFlags, // in

BYTE *pbSignature, // out

DWORD *pdwSigLen // in, out

);

参数:

hProv

[in]CSP 句柄。

hHash

[in]哈希句柄。

dwKeySpec

[in]指定密钥对属性。

sDescription

[in]哈希对象描述。

dwFlags

[in]特殊定义。

pbSignature

[out]指向签名结果的缓冲区指针。

pdwSigLen

[out]指向DWORD 值的指针,此值指出签名结果的长度。

说明:

此函数用指定私钥对哈希值进行数字签名。


1.5.25CPVerifySignature

BOOL CPVerifySignature(

HCRYPTPROV hProv, // in

HCRYPTHASH hHash, // in

CONST BYTE *pbSignature, // in

DWORD dwSigLen, // in

HCRYPTKEY hPubKey, // in

LPCWSTR sDescription, // in

DWORD dwFlags // in

);

参数:

hProv

[in]CSP 句柄。

hHash

[in]哈希句柄。

pbSignature

[in]指向签名结果的缓冲区指针。

dwSigLen

[in]指向DWORD 值的指针,此值指出签名结果的长度。

hPubKey

[in] 用于签名验证的公钥句柄。

sDescription

[in]哈希对象描述。

dwFlags

[in]特殊定义。

说明:

此函数用指定私钥对签名值进行签名验证。


2.CSP支持的算法

1. RSA加密(1024位)

2. RSA签名(1024位)

3. DES

4. 3DES(192位)

5. RC4(40位――128位)

6. SHA1

7. MD5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: