• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 加解密算法库框架概述
2加解密算法库框架是一个屏蔽了第三方密码学算法库实现差异的算法框架,提供加解密、签名验签、消息验证码、哈希、安全随机数等相关功能。开发者可以通过调用加解密算法库框架,忽略底层不同三方算法库的差异,实现迅捷开发。
3
4> **说明:**
5>
6> 加解密算法库框架仅提供密钥的密码学操作,而不提供密钥管理功能。因此,使用算法库时,需要应用自己来保管密钥(适用于临时会话密钥等仅在内存中使用的场景,或者应用自己实现密钥安全存储的场景)。如果业务需要由系统提供密钥管理功能(密钥存储等),请使用[HUKS部件](huks-overview.md)。
7
8## 框架实现原理
9
10加解密算法库框架提供的组件分为三层:接口层,Framework层和插件层。接口层负责对外提供统一的JS接口,插件层实现针对具体三方算法库的功能,Framework层通过灵活加载插件层的插件适配并屏蔽三方算法库差异。
11
12## 基本概念
13
14### 对称密钥
15
16对称密钥使用同一个密钥对数据进行加密解密操作。即对称加密算法中,数据发送方使用加密密钥对明文进行特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用同一个加密密钥以及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
17
18- **AES密钥**
19
20  AES的全称是Advanced Encryption Standard,是最常见的对称加密。AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。
21
22- **3DES密钥**
23
24  3DES,也称为 3DESede 或 TripleDES,是三重数据加密算法,相当于是对每个数据块应用三次DES的对称加密算法,它使用3个64位的密钥对数据块进行三次加密。相比DES,3DES因密钥长度变长,安全性有所提高,但其处理速度不高。因此又出现了AES加密算法,AES较于3DES速度更快、安全性更高。
25
26- **SM4密钥**
27
28  SM4密码算法是一个分组算法,该算法的分组长度为128位,密钥的长度为128位。加密算法与密钥扩展算法都采用32轮非线性迭代结构,数据解密和数据加密的算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
29
30### 非对称密钥
31
32非对称密钥使用公钥和私钥两个密钥来进行算法操作,公钥对外公开,私钥对外保密。对于加解密操作,一般使用公钥对明文进行加密形成密文,持有私钥的人即可对密文解密形成明文。对于签名验签操作,使用私钥对明文进行签名,公钥持有者可以通过公钥对签名数据做验签,验证数据是否被篡改。
33
34- **RSA密钥**
35
36  RSA算法是由Ron Rivest、Adi Shamir和Leonard Adleman一起提出的,是一种非对称加密算法,广泛应用于现代的信息加密传输等领域。它的数学基础是大质数相乘,对其积做因式分解的计算困难性。
37
38  RSA密钥参数,涉及三个整数,包括:
39
40  n:模数(Modulus),是私钥和公钥的公共参数。
41
42  sk:私钥指数(privateExponent),公式中常写作d。
43
44  pk:公钥指数(publicExponent),公式中常写作e。
45
46- **ECC密钥**
47
48  ECC的全称是Elliptic Curve Cryptography,是一种基于椭圆曲线数学的公开密钥加密算法,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性,算法库框架提供了多种椭圆曲线的ECC密钥生成能力。
49
50  椭圆曲线算法可以看作是定义在特殊集合下数的运算,当前算法库支持的是Fp域的椭圆曲线,p为素数,Fp域也称素数域。
51
52  Fp域下的ECC密钥参数,包括:
53
54  p: 素数,用于确定Fp。
55
56  a, b: 确定椭圆曲线的方程。
57
58  g: 椭圆曲线的一个基点(base point),可由gx,gy表示。
59
60  n: 基点g的阶(order)。
61
62  h: 余因子(cofactor)。
63
64  sk: 私钥,是一个随机整数,小于n。
65
66  pk: 公钥,是椭圆曲线上的一个点, pk = sk * g。
67
68- **DSA密钥**
69
70  DSA的全称是Digital Signature Algorithm,是一种基于模算数和整数有限域离散对数难题的一种公开密钥算法,不能用于加解密,一般用于数字签名和验签,算法库框架提供了多种不同长度的DSA密钥生成能力。
71
72  DSA密钥参数,包括:
73
74  p:一个素模数,比特长度为64的整数倍。
75
76  q:p-1的素因子,长度与p的长度有关。
77
78  g:g = (h ^ ((p - 1) / q)) mod p,h为满足1 < h < p -1的任意整数。
79
80  sk:私钥,为随机生成的整数,满足0 < sk < q。
81
82  pk:公钥,pk = (g ^ sk) mod p。
83
84- **SM2密钥**
85
86  SM2算法是一种基于椭圆曲线的公钥密码算法,其密钥长度为256位。SM2算法采用的是Fp域上的椭圆曲线。
87
88  Fp域下的SM2密钥参数,包括:
89
90  p: 大于3的素数,用于确定Fp。
91
92  a, b: 定义椭圆曲线的方程。
93
94  g: 椭圆曲线的一个基点(base point),可由gx,gy表示。
95
96  n: 基点g的阶(order)。
97
98  h: 余因子(cofactor)。
99
100  sk: 私钥,是一个随机整数,小于n。
101
102  pk: 公钥,是椭圆曲线上的一个点, pk = sk * g。
103
104### 加解密
105
106- **对称AES加解密**
107
108  算法库目前提供了AES加解密常用的7种加密模式:ECB、CBC、OFB、CFB、CTR、GCM和CCM。AES为分组加密算法,分组长度大小为128位。实际应用中明文最后一组可能不足128位,不足数据可以使用各种padding模式做数据填充。下文中描述了各个padding的区别:
109  - NoPadding:不带填充。
110  - PKCS5:填充字符由一个字节序列组成,每个字节填充该填充字节序列的长度,规定是8字节填充。
111  - PKCS7:填充字符和PKCS5填充方法一致,但是可以在1-255字节之间任意填充。
112
113  > **说明:**
114  >
115  > ECB、CBC加密模式,明文长度不是128位整数倍,必须使用填充方法补足。<br/>
116  > 由于需要填充至分组大小,所以实际算法库中的PKCS5和PKCS7都是以分组大小作为填充长度的,即AES加密填充至16字节。
117
118- **对称3DES加解密**
119
120  该算法的加解密过程分别是对明文/密文数据进行三次DES加密或解密,得到相应的密文或明文。
121
122  算法库目前提供了3DES加解密常用的4种加密模式:ECB、CBC、OFB和CFB。DES为分组加密算法,分组长度大小为64位。实际应用中明文最后一组可能不足64位,不足数据可以使用各种padding模式做数据填充。下文中描述了各个padding的区别:
123  - NoPadding:不带填充。
124  - PKCS5:填充字符由一个字节序列组成,每个字节填充该填充字节序列的长度,规定是8字节填充。
125  - PKCS7:填充字符和PKCS5填充方法一致,但是可以在1-255字节之间任意填充。
126
127  > **说明:**
128  >
129  > ECB、CBC加密模式,明文长度不是64位整数倍,必须使用填充方法补足。<br/>
130  > 由于需要填充至分组大小,所以实际算法库中的PKCS5和PKCS7都是以分组大小作为填充长度的,即3DES加密填充至8字节。
131
132- **对称SM4加解密**
133
134  算法库目前提供了SM4加解密常用的6种加密模式:ECB、CBC、CTR、OFB、CFB和CFB128。SM4为分组加密算法,分组长度大小为128位。实际应用中明文最后一组可能不足128位,不足数据可以使用各种padding模式做数据填充。下文中描述了各个padding的区别:
135
136  - NoPadding:不带填充。
137  - PKCS5:填充字符由一个字节序列组成,每个字节填充该填充字节序列的长度,规定是8字节填充。
138  - PKCS7:填充字符和PKCS5填充方法一致,但是可以在1-255字节之间任意填充。
139
140  > **说明:**
141  >
142  > ECB、CBC加密模式,明文长度不是128位整数倍,必须使用填充方法补足。<br/>
143  > 由于需要填充至分组大小,所以实际算法库中的PKCS5和PKCS7都是以分组大小作为填充长度的,即SM4加密填充至16字节。
144
145- **非对称RSA加解密**
146
147  RSA为非对称加密算法,加密长度需要在固定长度进行,实际应用中会使用各种padding模式做数据填充。算法库目前提供了RSA加解密常用的三种模式:NoPadding、PKCS1和PKCS1_OAEP。下文中描述了各个padding的区别:
148  - NoPadding:不带填充,输入的数据必须与RSA钥模一样长,输出数据长度与RSA钥模一样长。
149  - PKCS1:即RFC3447规范中的RSAES-PKCS1-V1_5模式(对应于OpenSSL中的RSA_PKCS1_PADDING)在进行RSA运算时需要将源数据D转化为Encryption block(EB),加密时,输入的数据最大长度 <= RSA钥模 - 11,输出数据长度与RSA钥模一样长。
150  - PKCS1_OAEP:即RFC3447规范中的RSAES-OAEP模式(对应于OpenSSL中的RSA_PKCS1_OAEP_PADDING),是PKCS#1推出的新填充方式,此模式需要设置两个摘要(md和mgf1_md),加密时,输入的数据必须小于RSA钥模 - md摘要长度 - mgf1_md摘要长度 - 2(摘要长度以字节为单位),输出数据长度与RSA钥模一样长;此模式还可额外设置pSource字节流,来定义OAEP填充的编码输入P,并且可以获取PKCS1_OAEP的相关参数。<br><br>
151  PKCS1_OAEP的相关参数包括:<br>
152  md: 摘要算法。<br>
153  mgf: 掩码生成算法,目前仅支持MGF1。<br>
154  mgf1_md: mgf1摘要算法。<br>
155  pSource: 字节流,用于编码输入。
156
157  > **说明:**
158  >
159  > RSA钥模 = (RSA的bits + 7) / 8
160
161- **非对称SM2加解密**
162
163  SM2为非对称加密算法,是国家密码管理局发布的椭圆曲线公钥密码算法,加密长度在固定长度进行。算法库目前支持以C1C3C2格式输出加密数据,支持对C1C3C2格式的输入数据进行解密。
164
165### 签名验签
166
167- **RSA签名验签**
168
169  算法库框架目前提供了两种RSA签名验签的padding模式:PKCS1和PSS。下面对两种模式做详细描述:
170  - PKCS1: 即RFC3447规范中的RSASSA-PKCS1-V1_5模式(对应于OpenSSL中的RSA_PKCS1_PADDING),在签名验签时,使用该模式时需要设置摘要(md),摘要算法输出的长度(字节)需要小于RSA的钥模。
171  - PSS: 即RFC3447规范中的RSASSA-PSS模式(对应于OpenSSL中的RSA_PKCS1_PSS_PADDING),此模式需要设置两个摘要(md和mgf1_md),且md和mgf1_md长度之和(字节)需要小于RSA的钥模;此模式还可额外设置以字节为单位的盐长度(saltLen),并且可以获取PSS的相关参数。<br><br>
172  PSS的相关参数包括:<br>
173  md: 摘要算法。<br>
174  mgf: 掩码生成算法,目前仅支持MGF1。<br>
175  mgf1_md: MGF1算法中使用的摘要算法。<br>
176  saltLen: 盐长度,以字节为单位。<br>
177  trailer_field:用于编码操作的整数,其值只支持为1。
178
179  > **说明:**
180  >
181  > RSA钥模 = (RSA的bits + 7) / 8
182
183- **ECDSA**
184
185  椭圆曲线数字签名算法(ECDSA)是基于椭圆曲线密码(ECC)的数字签名算法(DSA)。相比普通的离散对数问题(DLP)和大数分解问题(IFP),椭圆曲线密码的单位比特强度要高于其他公钥体制。算法库框架提供了多种椭圆曲线及摘要算法组合的椭圆曲线数字签名算法(ECDSA)能力。
186
187- **DSA**
188
189  数字签名算法(DSA)的安全性基于整数有限域离散对数问题的困难性,这类签名标准具有较大的兼容性和适用性。
190
191- **SM2**
192
193  数字签名算法(SM2)是基于椭圆曲线的算法,由国家密码管理局发布。
194
195
196### 密钥协商
197
198- **ECDH**
199
200  ECDH的全称是椭圆曲线迪菲-赫尔曼秘钥交换,是用来在一个非安全通道中建立起安全的共有加密资料,交换双方可以在不共享任何秘密的情况下协商出一个密钥。算法库框架基于开源算法库提供了多种椭圆曲线的ECDH能力。
201
202### 摘要
203
204消息摘要算法是一种能将任意长度的输入消息,通过哈希算法生成长度固定的摘要的算法。消息摘要算法通过其不可逆的特性能被用于敏感信息的加密。消息摘要算法也被称为哈希算法或单向散列算法。
205在摘要算法相同时,生成的摘要值主要有下列特点:
206
207- 当输入消息相同时,生成摘要序列相同。
208- 当输入消息的长度不一致时,生成摘要序列长度固定(摘要长度由算法决定)。
209- 当输入消息不一致时,生成摘要序列几乎不会相同(依然存在相同概率,由摘要长度决定相同概率)。
210
211### 消息验证码
212
213HMAC(Hash-based Message Authentication Code)是一种基于密钥的消息认证码算法。HMAC通过指定摘要算法,以通信双方共享密钥与消息作为输入,生成消息认证码用于检验传递报文的完整性,HMAC生成的消息认证码为固定长度。HMAC在消息摘要算法的基础上增加了密钥的输入,确保了信息的正确性。
214
215### 随机数
216
217随机数在加解密过程中主要用于临时会话密钥的生成与非对称加密算法中密钥的生成。随机数由硬件生成的硬件随机数生成器或由软件生成的伪随机数生成器进行生成。在加解密的场景中,安全随机数生成器需要具备随机性,不可预测性,与不可重现性。密码学安全伪随机数生成器CSPRNG(Cryptography Secure Random Number Generators)生成的随机数满足密码学安全伪随机性。
218
219- **内部状态**代表随机数生成器内存中的数值,当内部状态相同时,随机数生成器会生成固定的随机数序列。
220- **种子**(seed)是一个用来对伪随机数的内部状态进行初始化的数据,随机数生成器通过种子来生成一系列的随机序列。
221
222## 约束与限制
223
224- 算法库框架不支持多线程并发操作。
225- 算法库当前只支持OpenSSL。
226- 使用密钥参数生成密钥时,用到的bigint类型需要以大端的形式输入,且必须为正数。
227- 加解密算法库提供常用算法,其中有部分算法和规格并不适用于安全场景,如MD5等,用户需要根据使用需求选择适合的算法。
228
229## 密钥生成规格
230
231密钥生成有两种指定规格的方式:字符串参数 / 密钥参数。
232- 字符串参数:以字符串的形式描述用户想要生成的密钥规格。
233- 密钥参数:使用密钥的详细密码学信息,构造密钥对象。
234
235### AES密钥生成规格
236
237- 支持以字符串参数来生成AES密钥,其生成参数如下表所示:
238
239  |对称密钥算法|密钥长度(bit)|字符串参数|
240  |---|---|---|
241  |AES|128|AES128|
242  |AES|192|AES192|
243  |AES|256|AES256|
244
245  > **说明:**
246  >
247  > “字符串参数”是“对称密钥算法”和“密钥长度”拼接而成,用于在创建对称密钥生成器时,指定密钥规格。
248
249### 3DES密钥生成规格
250
251- 支持以字符串参数来生成3DES密钥,其生成参数如下表所示:
252
253  |对称密钥算法|密钥长度(bit)|字符串参数|
254  |---|---|---|
255  |3DES|192|3DES192|
256
257  > **说明:**
258  >
259  > “字符串参数”是“对称密钥算法”和“密钥长度”拼接而成,用于在创建对称密钥生成器时,指定密钥规格。
260
261### RSA密钥生成规格
262
263  > **说明:**
264  >
265  > 从API version 10开始, 支持使用密钥参数来生成RSA密钥。
266
267- 支持以字符串参数来生成RSA密钥,其生成参数如下表所示:
268
269  |RSA密钥类型|素数个数|字符串参数|
270  |---|---|---|
271  |RSA512|2|RSA512\|PRIMES_2|
272  |RSA768|2|RSA768\|PRIMES_2|
273  |RSA1024|2|RSA1024\|PRIMES_2|
274  |RSA1024|3|RSA1024\|PRIMES_3|
275  |RSA2048|2|RSA2048\|PRIMES_2|
276  |RSA2048|3|RSA2048\|PRIMES_3|
277  |RSA3072|2|RSA3072\|PRIMES_2|
278  |RSA3072|3|RSA3072\|PRIMES_3|
279  |RSA4096|2|RSA4096\|PRIMES_2|
280  |RSA4096|3|RSA4096\|PRIMES_3|
281  |RSA4096|4|RSA4096\|PRIMES_4|
282  |RSA8192|2|RSA8192\|PRIMES_2|
283  |RSA8192|3|RSA8192\|PRIMES_3|
284  |RSA8192|4|RSA8192\|PRIMES_4|
285  |RSA8192|5|RSA8192\|PRIMES_5|
286
287  > **说明:**
288  >
289  > “字符串参数”是“RSA密钥类型”和“素数个数”拼接而成,用于在创建非对称密钥生成器时,指定密钥规格。生成RSA非对称密钥时,默认素数为2,PRIMES_2参数可省略。
290
291- 支持以密钥参数来生成RSA密钥,其密钥参数种类和各个密钥参数的密码学规格要求如下表所示:
292
293  |   |公共参数|公钥参数|私钥参数|公私钥对参数|
294  |---|---------|---|---|---|
295  |n    |×    |√    |×    |√   |
296  |pk|    |√    |    |√    |
297  |sk|    |    |×    |√    |
298
299  > **说明:**
300  >
301  > 密钥参数用于在创建非对称密钥生成器时,指定密钥规格。</br>
302  > 上表说明了算法库对于指定公/私钥参数生成RSA密钥的支持情况。</br>
303    打√的表示需要指定这一列中的具体属性,来构成密钥参数。</br>
304    打×的表示这一列中的具体属性对应于某种密钥参数,但是算法库当前不支持通过该密钥参数生成密钥。
305
306  > **注意:**
307  >
308  > 1. RSA不支持通过指定公共参数(n)来随机生成密钥。
309  > 2. RSA不支持通过指定私钥参数(n, sk)来生成私钥。
310
311### ECC密钥生成规格
312
313  > **说明:**
314  >
315  > 从API version 10开始, 支持使用密钥参数来生成ECC密钥。
316
317- 支持以字符串参数来生成ECC密钥,其生成参数如下表所示:
318
319  |非对称密钥算法|密钥长度(bit)|曲线名|字符串参数|
320  |---|---|---|---|
321  |ECC|224|NID_secp224r1|ECC224|
322  |ECC|256|NID_X9_62_prime256v1|ECC256|
323  |ECC|384|NID_secp384r1|ECC384|
324  |ECC|521|NID_secp521r1|ECC521|
325
326  > **说明:**
327  >
328  > “字符串参数”是“非对称密钥算法”和“密钥长度”拼接而成,用于在创建非对称密钥生成器时,指定密钥规格。</br>
329  > 当前支持的ECC均为Fp域曲线。
330
331- 支持以密钥参数来生成ECC密钥,其密钥参数种类和各个密钥参数的密码学规格要求如下表所示:
332  |   |公共参数|公钥参数|私钥参数|公私钥对参数|
333  |---|---|---|---|---|
334  |fieldType|    √|    √|    √|    √|
335  |p    |    √|    √|    √|    √|
336  |a    |    √|    √|    √|    √|
337  |b    |    √|    √|    √|    √|
338  |g    |    √|    √|    √|    √|
339  |n    |    √|    √|    √|    √|
340  |h    |    √|    √|    √|    √|
341  |pk    |    |    √|     |    √|
342  |sk    |    |     |    √|    √|
343
344  > **说明:**
345  >
346  > 密钥参数用于在创建非对称密钥生成器时,指定密钥规格。</br>
347  > 上表说明了算法库对于指定公/私钥参数生成ECC密钥的支持情况。</br>
348  > 打√的表示需要指定这一列中的具体属性,来构成密钥参数。
349
350  > **注意:**
351  >
352  > 1. 当前ECC只支持Fp域,因此fieldType固定为"Fp"。fieldType和p构成了属性field,当前field只支持[ECFieldFp](../reference/apis/js-apis-cryptoFramework.md#ecfieldfp10)。
353  > 2. g和pk为ECC曲线上的点,属于[Point](../reference/apis/js-apis-cryptoFramework.md#point10)类型,需要指定具体X,Y坐标。
354
355### DSA密钥生成规格
356
357  > **说明:**
358  >
359  > 从API version 10开始, 支持DSA算法,包括密钥生成和签名验签。
360
361- 支持以字符串参数来生成DSA密钥,其生成参数如下表所示:
362
363  |非对称密钥算法|密钥长度(bit)|字符串参数|
364  |---|---|---|
365  |DSA|1024|DSA1024|
366  |DSA|2048|DSA2048|
367  |DSA|3072|DSA3072|
368
369  > **说明:**
370  >
371  > “字符串参数”是“非对称密钥算法”和“密钥长度”拼接而成,用于在创建非对称密钥生成器时,指定密钥规格。
372
373- 支持以密钥参数来生成DSA密钥,其密钥参数种类和各个密钥参数的密码学规格要求如下表所示:
374
375  |   |公共参数|公钥参数|私钥参数|公私钥对参数|
376  |---|---------|---|---|---|
377  |p    |√    |√    |×    |√   |
378  |q    |√    |√    |×    |√   |
379  |g    |√    |√    |×    |√   |
380  |pk   |    |√    |    |√    |
381  |sk   |    |     |×    |√    |
382
383  > **说明:**
384  >
385  > 密钥参数用于在创建非对称密钥生成器时,指定密钥规格。</br>
386  > 上表说明了算法库对于指定公/私钥参数生成DSA密钥的支持情况。</br>
387  > 打√的表示需要指定这一列中的具体属性,来构成密钥参数。</br>
388  > 打×的表示这一列中的具体属性对应于某种密钥参数,但是算法库当前不支持通过该密钥参数生成密钥。
389
390  > **注意:**
391  >
392  > 1. DSA不支持通过指定私钥参数(p, q, g, sk)来生成私钥。
393  > 2. 当使用公共参数(p, q, g)来生成DSA密钥对时,DSA密钥长度至少需要1024位。
394
395
396### SM2密钥生成规格
397
398> **说明:**
399>
400> 从API version 10开始, 支持SM2密钥随机生成。
401
402- 支持以字符串参数来生成SM2密钥,其生成参数如下表所示:
403
404  |非对称密钥算法|密钥长度(bit)|字符串参数|
405  |---|---|---|
406  |SM2|256|SM2_256|
407
408  > **说明:**
409  >
410  > “字符串参数”是“非对称密钥算法”和“密钥长度”使用连接符号“_”拼接而成,用于在创建非对称密钥生成器时,指定密钥规格。
411
412### SM4密钥生成规格
413
414> **说明:**
415>
416> 从API version 10开始, 支持SM4密钥随机生成。
417
418- 支持以字符串参数来生成SM4密钥,其生成参数如下表所示:
419
420  |对称密钥算法|密钥长度(bit)|字符串参数|
421  |---|---|---|
422  |SM4|128|SM4_128|
423
424  > **说明:**
425  >
426  > “字符串参数”是“对称密钥算法”和“密钥长度”使用连接符号“_”拼接而成,用于在创建对称密钥生成器时,指定密钥规格。
427
428## 加解密规格
429
430### 对称加解密
431
432  > **说明:**
433  >
434  > 从API version 10开始, 支持对称加解密不带密钥长度的规格。
435
436- 支持的对称加密算法:
437  |对称加解密算法|分组模式|字符串参数                                         |
438  |---|---|---|
439  |3DES|ECB|3DES192\|ECB\|[NoPadding\|PKCS5\|PKCS7]|
440  |3DES|CBC|3DES192\|CBC\|[NoPadding\|PKCS5\|PKCS7]|
441  |3DES|OFB|3DES192\|OFB\|[NoPadding\|PKCS5\|PKCS7]|
442  |3DES|CFB|3DES192\|CFB\|[NoPadding\|PKCS5\|PKCS7]|
443  |AES|ECB|AES[128\|192\|256]\|ECB\|[NoPadding\|PKCS5\|PKCS7]|
444  |AES|CBC|AES[128\|192\|256]\|CBC\|[NoPadding\|PKCS5\|PKCS7]|
445  |AES|CTR|AES[128\|192\|256]\|CTR\|[NoPadding\|PKCS5\|PKCS7]|
446  |AES|OFB|AES[128\|192\|256]\|OFB\|[NoPadding\|PKCS5\|PKCS7]|
447  |AES|CFB|AES[128\|192\|256]\|CFB\|[NoPadding\|PKCS5\|PKCS7]|
448  |AES|GCM|AES[128\|192\|256]\|GCM\|[NoPadding\|PKCS5\|PKCS7]|
449  |AES|CCM|AES[128\|192\|256]\|CCM\|[NoPadding\|PKCS5\|PKCS7]|
450  |SM4|ECB|SM4_128\|ECB\|[NoPadding\|PKCS5\|PKCS7]|
451  |SM4|CBC|SM4_128\|CBC\|[NoPadding\|PKCS5\|PKCS7]|
452  |SM4|CTR|SM4_128\|CTR\|[NoPadding\|PKCS5\|PKCS7]|
453  |SM4|OFB|SM4_128\|OFB\|[NoPadding\|PKCS5\|PKCS7]|
454  |SM4|CFB|SM4_128\|CFB\|[NoPadding\|PKCS5\|PKCS7]|
455  |SM4|CFB128|SM4_128\|CFB128\|[NoPadding\|PKCS5\|PKCS7]|
456
457  > **说明:**
458  >
459  > 1. []中只能任选一项。
460  > 2. “字符串参数”是“对称加解密算法(含密钥长度)”、“分组模式”、“填充模式”拼接而成,用于在创建对称加解密实例时,指定对称加解密算法规格。
461  > 3. “字符串参数”中“SM4<sup>10+</sup>”和密钥长度间需要添加下划线
462
463### 非对称RSA加解密
464
465  > **说明:**
466  >
467  > 从API version 10开始, 支持非对称RSA加解密不带密钥长度的规格。
468
469RSA加解密时,涉及三种填充模式:NoPadding, PKCS1和PKCS1_OAEP。
470- 使用NoPadding模式时可以指定的参数:
471
472  |非对称密钥类型| 填充模式 | 字符串参数 |
473  |---|---|---|
474  |RSA512|NoPadding|RSA512\|NoPadding|
475  |RSA768|NoPadding|RSA768\|NoPadding|
476  |RSA1024|NoPadding|RSA1024\|NoPadding|
477  |RSA2048|NoPadding|RSA2048\|NoPadding|
478  |RSA3072|NoPadding|RSA3072\|NoPadding|
479  |RSA4096|NoPadding|RSA4096\|NoPadding|
480  |RSA8192|NoPadding|RSA8192\|NoPadding|
481  |RSA|NoPadding|RSA\|NoPadding|
482
483  > **说明:**
484  >
485  > 1. “字符串参数”是“非对称密钥类型”、“填充模式”拼接而成,用于在创建非对称加解密实例时,指定非对称加解密算法规格。
486  > 2. 在上表最后一行,为了兼容由密钥参数生成的密钥,RSA加解密参数输入密钥类型时支持不带长度,加解密运算取决于实际输入的密钥长度。
487
488- 使用PKCS1模式时可以指定的参数:
489
490  |非对称密钥类型| 填充模式 | 字符串参数 |
491  |---|---|---|
492  |RSA512|PKCS1|RSA512\|PKCS1|
493  |RSA768|PKCS1|RSA768\|PKCS1|
494  |RSA1024|PKCS1|RSA1024\|PKCS1|
495  |RSA2048|PKCS1|RSA2048\|PKCS1|
496  |RSA3072|PKCS1|RSA3072\|PKCS1|
497  |RSA4096|PKCS1|RSA4096\|PKCS1|
498  |RSA8192|PKCS1|RSA8192\|PKCS1|
499  |RSA|PKCS1|RSA\|PKCS1|
500
501  > **说明:**
502  >
503  > 1. “字符串参数”是“非对称密钥类型”、“填充模式”拼接而成,用于在创建非对称加解密实例时,指定非对称加解密算法规格。
504  > 2. 在上表最后一行,为了兼容由密钥参数生成的密钥,RSA加解密参数输入密钥类型时支持不带长度,加解密运算取决于实际输入的密钥长度。
505
506- 使用PKCS1_OAEP模式时可以指定的参数:
507
508  | 非对称密钥类型 | 填充模式 | 摘要 | 掩码摘要 |
509  |---|---|---|---|
510  |RSA512|PKCS1_OAEP|MD5|  [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
511  |RSA512|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
512  |RSA512|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
513  |RSA512|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224]
514  |RSA768|PKCS1_OAEP|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
515  |RSA768|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
516  |RSA768|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
517  |RSA768|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384]|
518  |RSA768|PKCS1_OAEP|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
519  |RSA768|PKCS1_OAEP|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224]|
520  |RSA1024|PKCS1_OAEP|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
521  |RSA1024|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
522  |RSA1024|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
523  |RSA1024|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
524  |RSA1024|PKCS1_OAEP|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
525  |RSA1024|PKCS1_OAEP|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384]|
526  |RSA2048|PKCS1_OAEP|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
527  |RSA2048|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
528  |RSA2048|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
529  |RSA2048|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
530  |RSA2048|PKCS1_OAEP|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
531  |RSA2048|PKCS1_OAEP|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
532  |RSA3072|PKCS1_OAEP|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
533  |RSA3072|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
534  |RSA3072|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
535  |RSA3072|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
536  |RSA3072|PKCS1_OAEP|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
537  |RSA3072|PKCS1_OAEP|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
538  |RSA4096|PKCS1_OAEP|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
539  |RSA4096|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
540  |RSA4096|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
541  |RSA4096|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
542  |RSA4096|PKCS1_OAEP|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
543  |RSA4096|PKCS1_OAEP|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
544  |RSA8192|PKCS1_OAEP|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
545  |RSA8192|PKCS1_OAEP|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
546  |RSA8192|PKCS1_OAEP|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
547  |RSA8192|PKCS1_OAEP|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
548  |RSA8192|PKCS1_OAEP|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
549  |RSA8192|PKCS1_OAEP|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
550  |RSA|PKCS1_OAEP|符合长度要求的摘要算法|MGF1_符合长度要求的摘要算法|
551
552  > **说明:**
553  >
554  > 1. []内的参数只能任选一项,非[]内的为固定值。
555  > 2. 使用时请从表格中选择非对称密钥类型、填充模式、摘要、掩码摘要四个数据,用|拼接成“字符串参数”,用于在创建非对称加解密实例时,指定非对称加解密算法规格。<br>
556  >    例如:"RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA256"
557  > 3. 在上表最后一行,为了兼容由密钥参数生成的密钥,RSA加解密参数输入密钥类型时支持不带长度,加解密运算取决于实际输入的密钥长度。
558  > 4. 输入的数据必须小于RSA钥模 - md摘要长度 - mgf1_md摘要长度 - 2,如RSA密钥为512位时,不支持SHA512,RSA钥模和摘要长度定义,详见[加解密](#加解密)中RSA的相关描述。
559
560- 使用PKCS1_OAEP模式时,可以通过获取加解密OAEP填充模式的各个[参数](../reference/apis/js-apis-cryptoFramework.md#cipherspecitem10),并设置OAEP填充的编码输入P。
561
562  | OAEP参数 |枚举值| 获取 | 设置 |
563  |---|---|---|---|
564  |md|OAEP_MD_NAME_STR |√||
565  |mgf|OAEP_MGF_NAME_STR|√||
566  |mgf1_md|OAEP_MGF1_MD_STR |√||
567  |pSource|OAEP_MGF1_PSRC_UINT8ARR|√|√|
568
569  > **说明:**
570  >
571  > 上表说明了算法库对于OAEP参数的获取和设置支持情况,打√的表示需要对该参数具有获取或设置的能力。
572
573
574### 非对称SM2加解密
575
576> **说明:**
577>
578> 从API version 10开始, 支持非对称SM2加解密,支持不带密钥长度的规格。
579
580SM2加解密时,仅支持C1C3C2密文排列组合模式。SM2非对称加密的结果由C1,C2,C3三部分组成。其中C1是根据生成的随机数计算出的椭圆曲线点,C2是密文数据,C3是通过指定摘要算法计算的值。国密新标准以C1,C3,C2顺序存放,不支持无摘要加密。
581- 支持的加密算法:
582
583  | 非对称密钥类型 | 摘要 | 字符串参数 |
584  |---|---|---|
585  |SM2_256|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512\|SM3]|SM2_256\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512\|SM3]|
586  |SM2|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512\|SM3]|SM2_256\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512\|SM3]|
587
588  > **说明:**
589  >
590  >  “字符串参数”是“非对称密钥类型”、“填充模式”拼接而成,用于在创建非对称加解密实例时,指定非对称加解密算法规格。
591
592## 签名验签规格
593
594### RSA签名验签
595
596  > **说明:**
597  >
598  > 从API version 10开始, 支持RSA签名验签不带密钥长度的规格。
599
600RSA签名验签时,涉及两种填充模式:PKCS1和PSS。
601
602-  使用PKCS1模式时可以指定的参数:
603
604  | 非对称密钥类型 | 填充模式 | 摘要 | 字符串参数 |
605  |---|---|---|---|
606  |RSA512|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384]|RSA512\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384]|
607  |RSA768|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|RSA768\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
608  |RSA1024|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|RSA1024\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
609  |RSA2048|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|RSA2048\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
610  |RSA3072|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|RSA3072\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
611  |RSA4096|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|RSA4096\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
612  |RSA8192|PKCS1|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|RSA8192\|PKCS1\|[MD5\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
613  |RSA|PKCS1|符合长度要求的摘要算法|RSA\|PKCS1\|符合长度要求的摘要算法|
614
615  > **说明:**
616  >
617  > 1. []内的参数只能任选一项,非[]内的为固定值。
618  > 2. 在上表最后一行,为了兼容由密钥参数生成的密钥,RSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
619  > 3. RSA签名验签时,摘要算法输出的长度,需要小于RSA的钥模, 如RSA密钥为512位时,不支持SHA512,详见[签名验签](#签名验签)中RSA的相关描述。
620
621- 使用PSS模式时可以指定的参数:
622
623  | 非对称密钥类型 | 填充模式 | 摘要 | 掩码摘要 |
624  |---|---|---|---|
625  |RSA512|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
626  |RSA512|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
627  |RSA512|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
628  |RSA512|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224]|RSA512\|PSS\|SHA256\|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224]|
629  |RSA768|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
630  |RSA768|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
631  |RSA768|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
632  |RSA768|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384]|
633  |RSA768|PSS|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256]|
634  |RSA768|PSS|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224]|
635  |RSA1024|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
636  |RSA1024|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
637  |RSA1024|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
638  |RSA1024|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
639  |RSA1024|PSS|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
640  |RSA1024|PSS|SHA512| [MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384]|
641  |RSA2048|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
642  |RSA2048|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
643  |RSA2048|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
644  |RSA2048|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
645  |RSA2048|PSS|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
646  |RSA2048|PSS|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
647  |RSA3072|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
648  |RSA3072|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
649  |RSA3072|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
650  |RSA3072|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
651  |RSA3072|PSS|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
652  |RSA3072|PSS|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
653  |RSA4096|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
654  |RSA4096|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
655  |RSA4096|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
656  |RSA4096|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
657  |RSA4096|PSS|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
658  |RSA4096|PSS|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
659  |RSA8192|PSS|MD5|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
660  |RSA8192|PSS|SHA1|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
661  |RSA8192|PSS|SHA224|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
662  |RSA8192|PSS|SHA256|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
663  |RSA8192|PSS|SHA384|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
664  |RSA8192|PSS|SHA512|[MGF1_MD5\|MGF1_SHA1\|MGF1_SHA224\|MGF1_SHA256\|MGF1_SHA384\|MGF1_SHA512]|
665  |RSA|PSS|符合长度要求的摘要算法|MGF1_符合长度要求的摘要算法|
666
667  > **说明:**
668  >
669  > 1. []内的参数只能任选一项,非[]内的为固定值。
670  > 2. 使用时请从表格中选择非对称密钥类型、填充模式、摘要、掩码摘要四个数据,用|拼接成“字符串参数”,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。<br>
671  >    例如:"RSA2048|PSS|SHA256|MGF1_SHA256"
672  > 3. 在上表最后一行,为了兼容由密钥参数生成的密钥,RSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
673  > 4. RSA签名验签时,对于PSS模式,md和mgf1_md长度之和(字节)需要小于RSA的钥模。如RSA密钥为512位时,无法支持md和mgf1_md同时为SHA256。RSA钥模和摘要长度定义,详见[签名验签](#签名验签)中RSA的相关描述。
674
675- 使用PSS模式时,可以通过获取签名验签PSS填充模式的各个[参数](../reference/apis/js-apis-cryptoFramework.md#signspecitem10),并设置PSS的以字节为单位的盐长度(saltLen)。
676
677  | PSS参数 |枚举值| 获取 | 设置 |
678  |---|---|---|---|
679  |md|PSS_MD_NAME_STR |√||
680  |mgf|PSS_MGF_NAME_STR|√||
681  |mgf1_md|PSS_MGF1_MD_STR |√||
682  |saltLen|PSS_SALT_LEN_NUM|√|√|
683  |trailer_field|PSS_TRAILER_FIELD_NUM|√||
684
685  > **说明:**
686  >
687  > 上表说明了算法库对于PSS参数的获取和设置支持情况,打√的表示需要对该参数具有获取或设置的能力。
688
689### ECDSA签名验签
690
691  > **说明**:<br>
692  > 从API version 10开始, 支持ECDSA签名验签不带密钥长度的规格。
693- 支持的ECDSA参数:
694
695  |非对称密钥类型|摘要|字符串参数|
696  |---|---|---|
697  |ECC224|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|ECC224\|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
698  |ECC256|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|ECC256\|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
699  |ECC384|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|ECC384\|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
700  |ECC521|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|ECC521\|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
701  |ECC|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|ECC\|[SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
702
703  > **说明:**
704  >
705  > 1. []内的参数只能任选一项,非[]内的为固定值。
706  > 2. 使用时请从表格中选择非对称密钥类型、摘要二个数据,用|拼接成“字符串参数”,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。<br>
707  >    例如:"ECC224|SHA256"
708  > 3. 在上表最后一行,为了兼容由密钥参数生成的密钥,ECDSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
709
710### DSA签名验签
711
712  > **说明:**
713  >
714  > 从API version 10开始, 支持DSA签名验签规格。
715
716- 支持的DSA参数:
717
718  |非对称密钥类型|摘要|字符串参数|
719  |---|---|---|
720  |DSA1024|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|DSA1024\|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
721  |DSA2048|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|DSA2048\|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
722  |DSA3072|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|DSA3072\|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
723  |DSA|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|DSA\|[NoHash\|SHA1\|SHA224\|SHA256\|SHA384\|SHA512]|
724
725  > **说明:**
726  >
727  > 1. []内的参数只能任选一项,非[]内的为固定值。
728  > 2. 使用时请从表格中选择非对称密钥类型、摘要二个数据,用|拼接成“字符串参数”,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。<br>
729  >    例如:"DSA1024|SHA256"
730  > 3. 在上表最后一行,为了兼容由密钥参数生成的密钥,DSA签名验签参数输入密钥类型时支持不带长度,签名验签运算取决于实际输入的密钥长度。
731
732
733### SM2签名验签
734
735> **说明:**
736>
737> 从API version 10开始, 支持SM2签名验签。
738
739- 支持的SM2参数:
740
741  |非对称密钥类型|摘要|字符串参数|
742  |---|---|---|
743  |SM2_256|SM3|SM2_256\|SM3|
744  |SM2|SM3|SM2\|SM3|
745
746  > **说明:**
747  >
748  > 1. []内的参数只能任选一项,非[]内的为固定值。
749  > 2. 使用时请从表格中选择非对称密钥类型、摘要二个数据,用|拼接成“字符串参数”,用于在创建非对称签名验签实例时,指定非对称签名验签算法规格。<br>
750  >    SM2签名时只支持SM3摘要。
751
752## 密钥协商规格
753
754### ECDH
755
756  > **说明:**
757  >
758  > 从API version 10开始, 支持ECDH不带密钥长度的规格。
759
760- 支持的ECDH参数:
761
762  |非对称密钥算法|字符串参数|
763  |---|---|
764  |ECC|ECC224|
765  |ECC|ECC256|
766  |ECC|ECC384|
767  |ECC|ECC521|
768  |ECC|ECC|
769
770  > **说明:**
771  >
772  > 1. “字符串参数”,用于在创建密钥协商时,指定密钥协商算法规格。
773  > 2. 在上表最后一行,为了兼容由密钥参数生成的密钥,ECDH密钥协商参数输入密钥类型时支持不带长度,密钥协商运算取决于实际输入的密钥长度。
774
775
776## MD消息摘要算法规格
777
778- 加解密算法库框架当前支持的MD算法参数:
779
780    > **说明:**
781    >
782    > 从API version 10开始, 支持SM3。
783
784  |摘要算法|支持种类|
785  |---|---|
786  |HASH|SHA1|
787  |HASH|SHA224|
788  |HASH|SHA256|
789  |HASH|SHA384|
790  |HASH|SHA512|
791  |HASH|MD5|
792  |HASH|SM3|
793
794  > **说明:**
795  >
796  > “支持种类”,用于在创建MD消息摘要时,指定MD消息摘要算法规格。
797
798## HMAC消息认证码算法规格
799
800- 加解密算法库框架当前支持的HMAC算法参数:
801
802    > **说明:**
803    >
804    > 从API version 10开始, 支持SM3。
805
806  |摘要算法|支持种类|
807  |---|---|
808  |HASH|SHA1|
809  |HASH|SHA224|
810  |HASH|SHA256|
811  |HASH|SHA384|
812  |HASH|SHA512|
813  |HASH|SM3|
814
815  > **说明:**
816  >
817  > “支持种类”,用于在创建HMAC消息认证码时,指定HMAC消息认证码算法规格。
818
819## 随机数
820- 加解密算法库框架支持随机数生成算法,目前只支持“CTR_DRBG"算法规格
821
822  > **说明:**
823  >
824  > 1. 随机数生成算法目前支持生成长度为[1, INT_MAX]的安全随机数,长度单位为byte。
825  > 2. 随机数生成算法使用openssl的RAND_priv_bytes接口生成安全随机数。