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