对称密钥生成和转换规格
===========

当前章节将说明系统目前支持的算法及其对应的规格。

开发者可以通过字符串参数承载密钥规格，来生成对应的密钥。对于每种算法支持的字符串参数，将会在具体的每个算法规格中介绍。

#### AES

AES（Advanced Encryption Standard），最常见的对称加密算法。

基本特点：

*   分组密码算法，分组长度为128位。
    
*   密钥长度为128位、192位或256位。
    
*   与3DES相比，安全性更高，处理速度更快。
    

当前支持以字符串参数生成AES密钥，具体的“字符串参数”由“对称密钥算法”和“密钥长度”拼接而成，用于在创建对称密钥生成器时，指定密钥规格。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| AES | 128 | AES128 | 9+ |
| AES | 192 | AES192 | 9+ |
| AES | 256 | AES256 | 9+ |

#### DES

DES（Data Encryption Standard）算法。

基本特点：

DES是一种分组加密算法，它将明文分成64位的块，然后对每个块进行加密操作。

当前支持以字符串参数生成DES密钥，具体的“字符串参数”由“对称密钥算法”和“密钥长度”拼接而成，用于在创建对称密钥生成器时，指定密钥规格。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| DES | 64 | DES64 | 20+ |

#### 3DES

3DES（Triple Data Encryption Algorithm），也称为3DESede或TripleDES。

基本特点：

*   使用3个64位的密钥对数据块进行三次加密，相当于对每个数据块执行三次DES（Data Encryption Standard）加密算法。
    
*   与DES相比，3DES的密钥长度更长，安全性更高，但处理速度不如DES。
    

当前支持以字符串参数生成3DES密钥，具体的“字符串参数”由“对称密钥算法”和“密钥长度”拼接而成，用于在创建对称密钥生成器时，指定密钥规格。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| 3DES | 192 | 3DES192 | 9+ |

#### SM4

SM4，即SM4分组密码算法。

基本特点：

*   分组密码算法，分组长度为128位。
    
*   密钥长度为128位。可通过扩展密钥增加密钥长度。
    
*   加密算法与密钥扩展算法都采用32轮非线性迭代结构，数据解密和数据加密的算法结构相同，只是轮密钥的使用顺序相反，解密轮密钥是加密轮密钥的逆序。
    

当前支持以字符串参数生成SM4密钥，具体的“字符串参数”由“对称密钥算法”和“密钥长度”使用连接符“\_”拼接而成，用于在创建对称密钥生成器时，指定密钥规格。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| SM4 | 128 | SM4\_128 | 10+ |

#### HMAC

HMAC（Hash-based message authentication code），是一种基于哈希的消息认证码算法，运算时需要输入对称密钥。

基本特点：

HMAC使用的对称密钥可以是任何长度。

*   如果密钥的长度大于HMAC分组长度，则将密钥进行单向散列的结果作为新的密钥。
    
*   如果密钥的长度小于HMAC分组长度，则将末尾填充0作为新的密钥，即最终的密钥长度与HMAC分组长度保持一致。
    
*   密钥长度推荐采用摘要算法的输出长度。
    

当前支持以字符串参数生成HMAC使用的对称密钥：

*   当HMAC使用的密钥长度与摘要算法的输出长度一致时，具体的“字符串参数”由“消息认证码算法”和“摘要算法”使用连接符“|”拼接而成，用于在创建对称密钥生成器时，指定密钥规格。
    
*   当HMAC使用的密钥长度不在上述摘要算法输出长度的范围内，可以通过字符串参数“HMAC”创建对称密钥生成器，并根据HMAC使用的密钥的二进制数据生成密钥。
    

| 消息认证码算法 | 摘要算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- | :-- |
| HMAC | SHA1 | 160 | HMAC|SHA1 | 11+ |
| HMAC | SHA224 | 224 | HMAC|SHA224 | 11+ |
| HMAC | SHA256 | 256 | HMAC|SHA256 | 11+ |
| HMAC | SHA384 | 384 | HMAC|SHA384 | 11+ |
| HMAC | SHA512 | 512 | HMAC|SHA512 | 11+ |
| HMAC | SM3 | 256 | HMAC|SM3 | 11+ |
| HMAC | \- | \[1, 32768\] | HMAC | 11+ |

#### ChaCha20

从API version 22开始，算法库支持该算法。

ChaCha20是一种现代化的流密码（stream cipher）对称加密算法。

基本特点：

*   流密码算法，无需填充算法。
    
*   密钥长度为256位。
    

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| ChaCha20 | 256 | ChaCha20 | 22+ |

#### RC2

从API版本26.0.0开始，算法库支持该算法。

RC2是一种分组密码算法，分组长度为64位。

基本特点：

*   分组长度为64位（8字节）。
*   密钥长度支持8位～1024位，字符串参数为RC2。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| RC2 | 8～1024 | RC2 | 26.0.0+ |

#### RC4

从API版本26.0.0开始，算法库支持该算法。

RC4是一种流密码算法。

基本特点：

*   流密码，无需填充。
*   密钥长度支持8位～4096位，字符串参数为RC4。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| RC4 | 8～4096 | RC4 | 26.0.0+ |

#### Blowfish（BF）

从API版本26.0.0开始，算法库支持该算法。

Blowfish是一种分组密码算法，分组长度为64位。

基本特点：

*   分组长度为64位（8字节）。
*   密钥长度支持32位～448位，字符串参数为Blowfish。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| Blowfish | 32～448 | Blowfish | 26.0.0+ |

#### CAST

从API版本26.0.0开始，算法库支持该算法。

CAST（如 CAST-128/CAST5）为分组密码算法，分组长度为64位。

基本特点：

*   分组长度为64位（8字节）。
*   密钥长度支持40位～128位，字符串参数为CAST。

| 对称密钥算法 | 密钥长度（bit） | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| CAST | 40～128 | CAST | 26.0.0+ |