Cryptography Functions

发布时间:2010-3-15 15:34
分类名称:PKI


Base Cryptography Functions

Base cryptographic functions provide the most flexible means of developing cryptography applications. All communication with a cryptographic service provider (CSP) occurs through these functions.

 

Base cryptographic functions are in the following broad groups:

l  Service Provider Functions

l  Key Generation and Exchange Functions

l  Object Encoding and Decoding Functions

l  Data Encryption and Decryption Functions

l  Hash and Digital Signature Functions

 

以下只是我的注释,详细信息见MSDN

 

Service Provider Functions

以下俩函数是关于Context(上下文)的

CryptAcquireContext

获取特定CSP中的当前用户的密钥容器的句柄。当然根据其参数不同,它还可以删除创建容器等操作。

Flags : CRYPT_VERIFYCONTEXT, CRYPT_NEWKEYSET, CRYPT_DELETEKEYSET

 

CryptReleaseContext

释放句柄,类似于CloseHandle的功能,有引用计数的功能。

 

以下三个函数和注册表相关

CryptEnumProviderTypes

CryptGetDefaultProvider

CryptEnumProviders 枚举系统中的CSP。系统CSP信息在注册表中保存,路径为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\ Provider。同样,我们可以利用注册表函数来写个枚举Csp的函数。

 

以下用来获取和设置CSP信息的。

CryptGetProvParam

获取 管理员PIN,当前Csp上下文容器名称,枚举Csp支持的算法,枚举容器名称,实现类型(硬件、软件、硬件和软件、可移动设备、未知),获取当期Csp名称,当前Csp类型,当前Csp版本,

 

CryptSetProvParam

类似CryptGetProvParam

 

Key Generation and Exchange Functions

CryptDeriveKey

用来生成session key(此密钥为对称密钥,用来做加密大量数据用的),此函数能保证,通过同样的Csp和同样的算法,使用同样的数据(如密码等)能生成相同的session key。与CryptGenKey不同,CryptGenKey生成的是一个随机key

生成的Key handle通常传入CryptEncrypt函数来加密文件。

 

CryptDuplicateKey

复制key

 

CryptExportKey

         1. Export PUBLICKEYBLOB                无需加密传输,因为本身就是公开的

         2. Export PRIVATEKEYBLOB              Session Key来加密传输

         3. Export SESSIONKEYBLOB              key exchange public key 来加密传输,这样只有目标能够解密该文件。

 

CryptImportKey

         1. Import session key                         加密传输

         2. Import public key                            无需加密传输

         3. Import public/private key pair     加密传输

 

CryptGenKey

用来产生随机密钥(对),

 

CryptGenRandom

创建随机数

 

CryptGetUserKey

获取交换密钥对或签名密钥对的句柄,仅仅适用于与某CSP关联的容器存在。

 

CryptGetKeyParam

CryptSetKeyParam

 

CryptEncrypt

         加密数据。可以使用对称密钥和非对称密钥加密。密钥句柄由CryptGenKey, CryptImportkey, CryptGetUserKey来获取。当使用的是非对称密钥对时,通常使用key pair 中的public key 加密数据。

 

CryptDecrypt

         当使用的是非对称密钥对时,通常使用key pair 中的private key 解密数据。