密钥导入和导出

可以使用 CNG 导入和导出 对称密钥 和非对称密钥。 可以使用密钥导出和导入功能在计算机之间移动密钥。

对称密钥

若要导入或导出用于加密和解密某些数据的对称(或会话)密钥,可以使用 BCryptImportKeyBCryptExportKey 函数。 通常,在使用 BCryptImportKey 函数导入之前,先使用 BCryptExportKey 函数导出密钥。 这些函数旨在通过使用 hExportKeyhImportKey 参数启用导出和导入密钥的加密;但是,这些函数的Microsoft实现不支持导出密钥和导入密钥的加密。

非对称密钥

若要导入非对称(或 公共/专用)密钥对,其中一个密钥用于加密,另一个密钥用于解密某些数据,可以使用 BCryptImportKeyPairNCryptImportKey 函数。 CNG 提供程序必须使用支持的 密钥 BLOB 类型对密钥对进行编码。 BCryptExportKey 可用于创建编码的密钥 BLOB。 CNG 结构 描述了密钥存储提供程序支持的关键 BLOB 类型和 Microsoft结构。

若要 BCryptExportKey 创建持久密钥对,输入密钥 BLOB 必须包含 私钥 公钥 不会持久保存。

密钥名称和导出策略不是 CNG 结构中定义的 BLOB 结构的一部分。 但是,如果 BLOB 的类型不透明(例如内部密钥状态的内存映像),BLOB 可能包含密钥名称和导出策略属性。

以下过程介绍如何使用其属性导入持久私钥。

导入持久密钥

  1. 使用 NCryptCreatePersistedKey 函数创建持久密钥。
  2. 使用 NCryptSetProperty 函数设置键对象上的任何所需属性。
  3. 将导入密钥 BLOB 设置为密钥上的属性,并将 BLOB 类型设置为属性名称。
  4. 使用 NCryptFinalizeKey 函数完成持久密钥导入。