密钥导入和导出
可以使用 CNG 导入和导出 对称密钥 和非对称密钥。 还可以使用密钥导出和导入功能在计算机之间移动密钥。
对称密钥
若要导入或导出对称 (或会话) 密钥,其中同一个密钥用于加密和解密某些数据,可以使用 BCryptImportKey 和 BCryptExportKey 函数。 通常,首先使用 BCryptExportKey 函数导出密钥,然后使用 BCryptImportKey 函数导入密钥。 这些函数旨在通过使用 hExportKey 和 hImportKey 参数启用导出和导入密钥的加密;但是,这些功能的 Microsoft 实现不支持加密导出和导入的密钥。
非对称密钥
若要导入非对称 (或 公共/私有) 密钥对,其中一个密钥用于加密,另一个密钥用于解密某些数据,可以使用 BCryptImportKeyPair 或 NCryptImportKey 函数之一。 CNG 提供程序必须使用支持的密钥 BLOB 类型对 密钥 对进行编码。 BCryptExportKey 可用于创建编码的密钥 BLOB。 CNG 结构 描述 Microsoft 密钥存储提供程序支持的关键 BLOB 类型和结构。
要使 BCryptExportKey 创建持久密钥对,输入密钥 BLOB 必须包含 私钥。 公钥 不会持久保存。
密钥名称和导出策略不属于 CNG 结构中定义的 BLOB 结构。 但是,如果 BLOB 为不透明的 BLOB 类型 ((例如内部密钥状态) 的内存映像),则 BLOB 可能包含密钥名称和导出策略属性。
以下过程介绍如何导入具有其属性的持久私钥。
导入持久化密钥
- 使用 NCryptCreatePersistedKey 函数创建持久密钥。
- 使用 NCryptSetProperty 函数设置键对象上的任何所需属性。
- 将导入密钥 BLOB 设置为密钥上的属性,将 BLOB 类型设置为属性名称。
- 使用 NCryptFinalizeKey 函数完成持久密钥导入。