1# 分段加解密说明
2
3在加解密的过程中,算法库没有对单次或累计的传入数据量设置大小限制,但在传入的数据量较大时(如数据量大于2M),建议开发者将数据分段,完成分段加解密,提高效率。
4
5## 对称加解密
6
7对称密钥的分段加解密,通过调用[Cipher.update](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#update-1)实现。
8
9开发者可自定义单次传入的数据量(示例中的updateLength),多次调用update传入数据。
10
11当前单次支持传入的最大长度为INT_MAX(Uint8Array类型的最大长度)。
12
13**开发者应当对每次update和doFinal的结果都判断是否为null,并在结果不为null时取出其中的数据进行拼接,形成完整的密文/明文。**
14
15**开发示例:** [使用AES对称密钥(GCM模式)分段加解密](crypto-aes-sym-encrypt-decrypt-gcm-by-segment.md)
16
17**开发示例:** [使用SM4对称密钥(GCM模式)分段加解密](crypto-sm4-sym-encrypt-decrypt-gcm-by-segment.md)
18
19## 非对称加解密
20
21非对称加解密,不支持update操作,仅需要调用[Cipher.init](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#init-1)和[Cipher.doFinal](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#dofinal-1)完成加解密。
22
23非对称密钥的分段加密是指当明文大于单次加密支持的数据长度时(具体长度请查[非对称密钥加解密算法规格](crypto-asym-encrypt-decrypt-spec.md)),需要将待加密数据分为合适长度的数据段,并对每个数据段执行加密操作,即创建Cipher,然后调用[Cipher.init](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#init-1)和[Cipher.doFinal](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#dofinal-1)接口。
24
25严格意义上说,是数据的拆分加解密,此时单次传入的数据量长度与密钥规格的长度相关。
26
27- RSA:填充模式不同,输入的数据的规则不同。请根据[RSA算法规格](crypto-asym-encrypt-decrypt-spec.md#rsa)确认单次传入的数据量长度。
28- SM2:加密长度需要在固定长度进行。具体请查阅[SM2算法规格](crypto-asym-encrypt-decrypt-spec.md#sm2)。
29
30**开发者应当对每次doFinal的结果都判断是否为null,并在结果不为null时取出其中的数据进行拼接,形成完整的密文/明文。**
31
32**开发示例:** [使用RSA非对称密钥分段加解密](crypto-rsa-asym-encrypt-decrypt-by-segment.md)
33
34## 常见问题
35
36- 分段加解密中,每次更新的数据量,与加密模式是否有关?
37
38   每次更新的数据量,由开发者自定义,与加密模式无关。
39
40   不同的加密模式,仅对加解密参数产生影响,不同的加密模式使用的加解密参数不同,具体请参考[ParamsSpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#paramsspec)。
41
42