CSP开发——基本函数详解3
来源:互联网 发布:用友软件庆阳总代理 编辑:程序博客网 时间:2024/05/21 19:33
Syntax句法
BOOL WINAPI CryptGenKey( BOOL WINAPI CryptGenKey( _In_ HCRYPTPROV hProv, _In_ HCRYPTPROV hProv, _In_ ALG_ID Algid, _In_ ALG_ID发冷, _In_ DWORD dwFlags, _In_ DWORD dwFlags中, _Out_ HCRYPTKEY *phKey _Out_ HCRYPTKEY * PHKEY); );
Parameters参数
- hProv [in]
一个加密服务提供程序 (CSP)的句柄。
- Algid [in]
一个ALG_ID识别算法的关键是要产生的价值。这个参数的值会有所不同,具体取决于所使用的CSP。
对于ALG_ID值使用的Microsoft Base Cryptographic Provider的,见基地提供商算法 。
对于ALG_ID值使用Microsoft强加密提供程序或Microsoft增强加密提供程序,请参阅增强提供算法 。
对于一个Diffie-Hellman CSP,请使用下列值之一。
Value值 意思 - CALG_DH_EPHEM
指定一个“短命”的Diffie-Hellman密钥。
- CALG_DH_SF
指定“存储和转发”Diffie-Hellman密钥。
除了对称算法生成会话密钥,此功能还可以生成公钥/私钥对 。 每一个的CryptoAPI的客户端通常具有两个公钥/私钥对。 要生成这些密钥对中的一个,设置发冷的参数为下列值之一。
Value值 意思 - AT_KEYEXCHANGE
密钥交换
- AT_SIGNATURE
数字签名
注意:指定,当关键的规格AT_KEYEXCHANGE和AT_SIGNATURE是,算法,用于生成密钥的标识符取决于所使用的提供者。因此,这些关键规格,从CryptGetKeyParam (,当KP_ALGID参数指定)返回的值取决于所使用的提供。 要确定哪些算法标识符由不同的供应商的的关键指标AT_KEYEXCHANGE和AT_SIGNATURE,ALG_ID 。
- dwFlags [in]
指定生成的密钥的类型。 可以设置一个会话密钥,RSA签名密钥和RSA密钥交换密钥生成密钥的大小。关键的大小,中位密钥模数的长度,设置此参数的高16位的。 因此,如果一个2048位的RSA签名密钥以产生,与任何其他dwFlags中预定义的值的按位OR运算相结合的值0x08000000。的高16位为0x0800或十进制的2048。 RSA1024BIT_KEY值可用于指定一个1024位的RSA密钥。
由于不断变化的出口管制限制,默认的CSP和操作系统版本的默认密钥长度可能会改变。重要的是,无论是加密和解密使用相同的CSP和密钥的长度可以明确地使用dwFlags参数设置,以确保互操作性在不同的操作系统平台。
特别是,默认的RSA加密服务提供程序是Microsoft RSA强加密提供程序。 默认的DSS签名的Diffie-Hellman加密服务提供程序是Microsoft增强DSS的Diffie-Hellman加密提供程序。这些电信运营商有一个默认的RC2和RC4对称密钥长度为128位和1024位的默认公共密钥算法的密钥长度。
如果的高16位是零,默认密钥大小产生。 如果大于最大的或小于最小的一个键被指定时,该呼叫失败与ERROR_INVALID_PARAMETER代码。
下表列出了最低,默认情况下,最大的签名和交换密钥长度与Windows XP开始。
Key type and provider主要类型和供应商 最小长度 默认长度 最大长度 RSA Base Provider RSA基本提供
Signature and ExchangeKeys签名和ExchangeKeys
384 384
512 512
16,384 16,384
RSA Strong and Enhanced Providers RSA强和增强供应商
Signature and Exchange Keys签名和密钥交换
384 384
1,024 1024
16,384 16,384
DSS Base Providers DSS基地供应商
Signature Keys签名密钥
512 512
1,024 1024
1,024 1024
DSS Base Providers DSS基地供应商
Exchange Keys交换密钥
不适用
不适用
不适用
DSS/DH Base Providers DSS / DH基地提供的
Signature Keys签名密钥
512 512
1,024 1024
1,024 1024
DSS/DH Base Providers DSS / DH基地提供的
Exchange Keys交换密钥
512 512
512 512
1,024 1024
DSS/DH Enhanced Providers DSS / DH增强供应商的
Signature Keys签名密钥
512 512
1,024 1024
1,024 1024
DSS/DH Enhanced Providers DSS / DH增强供应商的
Exchange Keys交换密钥
512 512
1,024 1024
4,096 4096
对于会话的密钥长度,参阅CryptDeriveKey 。
对于生成的密钥使用Microsoft提供的详细信息,请参阅Microsoft加密服务提供商 。
此参数的低16位,可以是零或以下值中的一个或多个的组合。
Value值 意思 - CRYPT_ARCHIVABLE
如果设置了这个标志,可以导出的关键,直至其手柄关闭调用CryptDestroyKey的 。 这使得新生成的密钥可以导出在创建时进行存档或键恢复。 句柄被关闭后,最关键的是不再出口的。
- CRYPT_CREATE_IV
这个标志没有被使用。
- CRYPT_CREATE_SALT
如果设置了这个标志,那么关键是分配一个随机salt值自动进行。您可以检索该盐值,通过使用CryptGetKeyParam的dwParam参数设置到KP_SALT的功能。
如果这个标志没有被设置,则该键将被赋予盐值为零。
当按键与salt值非零的出口(通过CryptExportKey ),然后salt值也必须获得和保持的关键BLOB 。
- CRYPT_DATA_KEY
这个标志没有被使用。
- CRYPT_EXPORTABLE
如果设置了这个标志,则该键就可以转出的CSP进入一键BLOB通过使用CryptExportKey功能。由于会话密钥可导出,通常应该设置此标志时,他们创建的。
如果这个标志没有被设置,那么关键就是无法导出。 对于一个会话密钥,这意味着,最关键的是只在当前会话中创建的应用程序将能够使用它。这意味着对于一个公钥/私钥对的私钥不能被运送或备份。
此标志仅适用于会话密钥和私人密钥块 。 它并不适用于公共密钥,它总是出口的。
- CRYPT_FORCE_KEY_PROTECTION_HIGH
此标志指定强密钥保护。这个标志被设置时,系统会提示用户输入密码的关键,使用此键时,用户将被提示输入密码。
此标志仅使用由Microsoft提供的CSP。.第三方电信运营商将自己的行为定义为强密钥保护。
.指定强密钥保护时,在系统注册表中指定的调用这个函数的CRYPT_USER_PROTECTED标志,此标志会导致同样的结果。
如果这个标志被指定和提供者把手在hProv参数创建通过使用CRYPT_VERIFYCONTEXT或CRYPT_SILENT标志,此功能将设置的最后一个错误NTE_SILENT_CONTEXT,并返回零。
Windows Server 2003和Windows XP中:这个标志不被支持。- CRYPT_KEK
这个标志没有被使用。
- CRYPT_INITIATOR
这个标志没有被使用。
- CRYPT_NO_SALT
这个的标志指定无盐值被分配一个40位的对称密钥 。 有关详细信息,请参阅salt值的功能 。
- CRYPT_ONLINE
这个标志没有被使用。
- CRYPT_PREGEN
此标志指定一个初始的Diffie-Hellman或DSS密钥生成。这个标志是有用的,只有通过Diffie-Hellman和DSS的CSP。当使用时,将使用默认的密钥长度,除非一个密钥长度中的高16位的 dwFlags参数指定。.如果涉及的密钥长度的参数上设置一个PREGEN的Diffie-Hellman或DSS键CryptSetKeyParam ,这里设置的密钥长度的密钥长度必须是兼容的。
- CRYPT_RECIPIENT
这个标志没有被使用。
- CRYPT_SF
这个标志没有被使用。
- CRYPT_SGCKEY
这个标志没有被使用。
- CRYPT_USER_PROTECTED
如果设置了这个标志,将通知用户通过一个对话框或某些行动时,另一种方法是尝试使用这把密钥。精确的行为是通过正在使用的CSP。如果提供的情况下被打开了与设置的CRYPT_SILENT标志,使用此标志会导致失败,并设置为NTE_SILENT_CONTEXT的最后一个错误。
- CRYPT_VOLATILE
这个标志没有被使用。
- phKey [out]
该函数的地址,以复制的新生成的密钥的句柄。当您使用完的关键,删除密钥句柄通过调用CryptDestroyKey功能。
Return value返回值
如果成功,或零,否则返回非零值。
- CSP开发——基本函数详解3
- CSP开发——基本函数详解1
- CSP开发——基本函数详解2
- CSP开发基础--CryptoAPI函数简介
- CSP开发基础--CryptoAPI函数简介
- CSP开发基础--CryptoAPI函数简介
- CSP开发基础--CryptoAPI函数简介
- CSP编程基础--CryptAPI基本函数含参介绍
- CSP编程基础--CryptAPI基本函数含参介绍
- CSP编程基础--CryptAPI基本函数含参介绍
- CSP编程基础--CryptAPI基本函数含参介绍
- CSP编程基础--CryptAPI基本函数含参介绍
- CCF —— CSP认证
- CCF CSP真题——201709-3 json查询
- CSP开发基础--CSP开发流程
- CSP开发基础--CSP开发流程
- CSP开发基础--CSP开发流程
- CSP接口函数介绍
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenGL和OpenCV区别
- java中String处理函数split
- c++自定义异常处理机制 .
- PBOC/EMV之DES算法
- winsock 错误多的真爽啊
- CSP开发——基本函数详解3
- 韩媒称韩国海警用橡皮弹打死1名中国船员
- 软件版本RC,M,GA……
- MFC中用GDI+动态显示图片的例子
- RHEL6 双网卡绑定
- windows XP/7访问linux虚拟机中的共享文件的方法
- page分页工具类 数据库端
- 运算符优先级 必熟记,放到心里
- javascript 继承实现方式