

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS CloudHSM 客户端 SDK 5 支持的 Java 密钥属性
<a name="java-lib-attributes_5"></a>

本主题提供有关 AWS CloudHSM 客户端 SDK 5 支持的 Java 密钥属性的信息。本主题介绍了如何使用 JCE 提供程序的专有扩展来设置密钥属性。使用此扩展可在以下操作期间设置受支持的密钥属性及其值：
+ 密钥生成
+ 密钥导入

有关如何使用密钥属性的示例，请参阅 [适用于客户端 SDK 5 的 Java AWS CloudHSM 软件库的代码示例](java-samples.md)。

**Topics**
+ [了解属性](#java-understanding-attributes_5)
+ [支持的 属性](#java-attributes_5)
+ [设置密钥的属性](#java-setting-attributes_5)

## 了解属性
<a name="java-understanding-attributes_5"></a>

可以使用密钥属性指定允许对密钥对象（包括公有密钥或私有密钥）执行哪些操作。可以在创建密钥对象的过程中定义密钥属性和值。

Java Cryptography Extension (JCE) 不指定如何设置密钥属性值，因此，默认情况下允许执行大多数操作。相比之下，PKCS \#11 标准定义了一组具有更受限的默认值的综合属性。从 JCE 提供程序 3.1 开始， AWS CloudHSM 提供了一个专有扩展，允许您为常用属性设置更严格的值。

## 支持的 属性
<a name="java-attributes_5"></a>

可以为下表中列出的属性设置值。作为最佳实践，仅为应受限的属性设置值。如果未指定值，则 AWS CloudHSM 使用下表中指定的默认值。默认值列中的空单元格表示未向该属性分配特定的默认值。


****  
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/java-lib-attributes_5.html)

**注意**  
您将获得对 PKCS \#11 库中属性的更广泛支持。有关更多信息，请参阅[支持的 PKCS \#11 属性](pkcs11-attributes.md)。

## 设置密钥的属性
<a name="java-setting-attributes_5"></a>

`KeyAttributesMap` 是一个类似于 Java Map 的对象，可以使用它设置密钥对象的属性值。`KeyAttributesMap` 函数的方法与用于 Java 映射操作的方法类似。

可以通过下面两种方式为属性设置自定义值：
+ 使用下表中列出的方法
+ 使用本文档后面演示的生成器模式

属性映射对象支持通过以下方法来设置属性：


****  

| 操作 | 返回值 | `KeyAttributesMap` 方法 | 
| --- | --- | --- | 
| 获取现有密钥的密钥属性值 | 对象（包含值）或 null | **get**(keyAttribute) | 
| 填充一个密钥属性的值  | 与密钥属性关联的上一个值，或 null（如果没有密钥属性的映射） | **put**(keyAttribute, value) | 
| 填充多个密钥属性的值 | 不适用 | **putall** () keyAttributesMap | 
| 从属性映射中删除密钥/值对 | 与密钥属性关联的上一个值，或 *null*（如果没有密钥属性的映射） | **remove**(keyAttribute) | 

**注意**  
未明确指定的任何属性都将设置为 [支持的 属性](#java-attributes_5) 中前面的表中列出的默认值。

### 设置密钥对的属性
<a name="java-setting-attributes-key-pair"></a>

使用 Java 类 `KeyPairAttributesMap` 处理密钥对的密钥属性。`KeyPairAttributesMap` 封装了两个 `KeyAttributesMap` 对象；一个用于公有密钥，另一个用于私有密钥。

要分别为公有密钥和私有密钥设置单个属性，您可以对该密钥的相应 `KeyAttributes` 映射对象使用 `put()` 方法。使用 `getPublic()` 方法可检索公有密钥的属性映射，使用 `getPrivate()` 可检索私有密钥的属性映射。使用 `putAll()` 填充公有密钥和私有密钥对的多个密钥属性的值，并将密钥对属性映射作为其参数。