一种处理数据的方法、装置、计算机可读存储介质及装置转让专利

申请号 : CN202111607184.4

文献号 : CN113987589B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陆舟

申请人 : 飞天诚信科技股份有限公司

摘要 :

本发明公开了一种处理数据的方法、装置、计算机可读存储介质及芯片,当安全存储模块的安全访问接口被应用程序调用时,安全存储模块根据预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组;根据获取的预置数组生成向量数组;获取预置数组的新内存空间的初始地址和新内存空间偏移地址;使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对数据进行处理;根据预置数组的新内存空间的初始地址和新内存空间偏移地址存储预置数组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储为预置数组的当前内存空间的初始地址和当前内存空间偏移地址。本发明提高了数据处理过程中的安全性。

权利要求 :

1.一种处理数据的方法,其特征在于,包括:当安全存储模块的安全访问接口被应用程序调用时,执行如下步骤:步骤101,所述安全存储模块判断是否存在预置数组的当前内存空间的初始地址和当前内存空间偏移地址,如果是,执行步骤103;

如果否,执行步骤102;

步骤102,所述安全存储模块根据预置的初始地址和预置的偏移地址获取预置数组,执行步骤104;

步骤103, 所述安全存储模块根据所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组,执行步骤104;

步骤104,所述安全存储模块根据获取的所述预置数组生成向量数组;

步骤105,所述安全存储模块获取所述预置数组的新内存空间的初始地址和新内存空间偏移地址;

步骤106,所述安全存储模块根据预置密钥和向量数组获取加解密密钥,根据加解密密钥对待处理数据进行处理;

步骤107,所述安全存储模块根据所述预置数组的新内存空间的初始地址和新内存空间偏移地址存储所述预置数组,并将所述预置数组的新内存空间的初始地址和新内存空间偏移地址存储为所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址。

2.如权利要求1所述方法,其特征在于,所述步骤104中所述安全存储模块根据获取的所述预置数组生成向量数组具体为:所述安全存储模块将所述预置数组作为向量数组。

3.如权利要求1所述方法,其特征在于,所述步骤104中所述安全存储模块根据获取的所述预置数组生成向量数组包括如下步骤:步骤B101,所述安全存储模块创建空数组,获取预设索引值,根据所述预设索引值获取所述预置数组中与其对应的数值作为预置向量,将所述预置向量记录到空数组得到当前向量数组,初始化计数值;

步骤B102,所述安全存储模块将所述预设索引值作为上一个索引值,将所述预置向量作为上一个向量;

步骤B103,所述安全存储模块根据所述上一个向量与所述预置数组的长度进行计算得到当前索引值,根据所述当前索引值获取所述预置数组中与其对应的数值作为当前向量, 将所述当前向量顺序记录到当前向量数组,更新所述计数值;

步骤B104,所述安全存储模块根据所述计数值判断是否已获取到全部向量,如果是,执行步骤B106, 如果否,执行步骤B105;

步骤B105,所述安全存储模块将所述当前索引值设置为所述上一个索引值,将当前向量设置为所述上一个向量,返回步骤B103;

步骤B106,所述安全存储模块将所述当前向量数组作为向量数组。

4.如权利要求1所述方法,其特征在于,所述步骤104中所述安全存储模块根据获取的所述预置数组生成向量数组包括如下步骤:步骤M1,所述安全存储模块读取设备标识文件中的设备标识;

步骤M2 ,所述安全存储模块将获取的所述预置数组按照预定的字节数进行分组,将各个分组分别与所述设备标识进行异或运算,将各个异或运算结果进行组合生成向量数组。

5.如权利要求4所述方法,其特征在于,所述步骤M1之前还包括:步骤M01, 所述安全存储模块判断设备标识文件是否存在,如果是,执行步骤M1, 如果否,执行步骤M02;

步骤M02, 所述安全存储模块生成设备标识,根据所述设备标识生成设备标识文件并存储,执行步骤M2。

6.如权利要求1所述方法,其特征在于,所述步骤105中所述安全存储模块获取所述预置数组的新内存空间的初始地址和新内存空间偏移地址具体为:所述安全存储模块调用动态内存分配函数获取所述预置数组的新内存空间的初始地址;所述安全存储模块调用随机数生成函数获取所述预置数组的新内存空间偏移地址。

7.如权利要求6所述方法,其特征在于,所述随机数生成函数的输入参数的范围为大于

0且小于内存空间的长度与预置数组长度的差值。

8.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

步骤106具体为:当所述安全访问接口为安全写接口时,所述安全存储模块根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到加解密密钥,使用所述加解密密钥对待写数据进行加密后存储;

当安全访问接口为安全读接口时,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,使用所述加解密密钥对读取的数据进行解密得到解密数据,向所述应用程序返回所述解密数据,根据所述向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对所述解密数据进行加密后存储。

9.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

步骤106具体为:当安全访问接口为安全写接口时,所述安全存储模块判断是否存在待写数据对应的数据文件,

如果是,所述安全存储模块根据数据文件读取数据,根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,使用所述加解密密钥对读取的数据进行解密得到解密数据,根据待写数据对所述解密数据进行修改,所述安全存储模块根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对修改后的解密数据进行加密后存储以更新所述数据文件;

如果否,所述安全存储模块根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到加解密密钥,使用所述加解密密钥对待写数据进行加密后存储以生成数据文件;

当安全访问接口为安全读接口时,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥;所述安全存储模块读取数据,使用所述加解密密钥对读取的数据进行解密得到解密数据,向所述应用程序返回所述解密数据,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对所述解密数据进行加密后存储。

10.如权利要求8所述方法,其特征在于,所述步骤106中的所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组具体为:根据所述向量数组、所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址进行异或运算得到第一新向量数组;

根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组具体为:根据所述向量数组、所述预置数组的新内存空间的初始地址和新内存空间偏移地址进行异或运算生成第二新向量数组。

11.如权利要求1所述方法,其特征在于,所述步骤106具体为:所述安全存储模块读取文件密钥文件,使用预置密钥对所述向量数组进行加密得到加解密密钥,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,所述安全存储模块使用所述文件密钥对待处理数据进行处理。

12.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口,

所述步骤106具体为:

当安全存储模块的安全访问接口为安全读接口时,所述安全存储模块读取文件密钥文件,使用预置密钥对所述向量数组进行加密得到加解密密钥,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥;所述安全存储模块读取数据,使用文件密钥对读取的数据进行解密得到解密数据,向所述应用程序返回所述解密数据;生成随机数,将所述随机数作为新文件密钥,所述安全存储模块使用新文件密钥对所述解密数据进行加密后存储;使用所述加解密密钥对新文件密钥进行加密生成新文件密钥文件,将所述新文件密钥文件存储为文件密钥文件;

当安全存储模块的安全访问接口为安全写接口时,所述安全存储模块生成随机数,将所述随机数作为文件密钥,所述安全存储模块使用文件密钥对待写数据进行加密后存储,根据加解密密钥对文件密钥进行加密生成文件密钥文件并保存。

13.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

所述步骤106具体为:

当安全存储模块的安全访问接口为安全读接口时,所述安全存储模块读取文件密钥文件,使用预置密钥对所述向量数组进行加密得到加解密密钥,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥;所述安全存储模块读取数据,使用所述文件密钥对读取的数据进行解密后获取解密数据,向所述应用程序返回所述解密数据;生成随机数,将所述随机数作为新文件密钥,所述安全存储模块使用所述新文件密钥对所述解密数据进行加密后存储;根据加解密密钥对所述新文件密钥进行加密得到新文件密钥文件,将新文件密钥文件存储为文件密钥文件;

当安全存储模块的安全访问接口为安全写接口时,所述安全存储模块判断是否存在待写数据对应的数据文件,

如果是,所述安全存储模块读取文件密钥文件,使用预置密钥对所述向量数组进行加密得到加解密密钥,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥;所述安全存储模块根据所述数据文件读取数据,使用所述文件密钥对读取的数据进行解密后获取解密数据,根据所述待写数据对所述解密数据进行修改,生成随机数,将所述随机数作为新文件密钥, 使用所述新文件密钥对修改后的数据进行加密后存储以更新所述数据文件,所述安全存储模块使用加解密密钥对所述文件密钥进行加密得到新文件密钥文件,将所述新文件密钥文件存储为文件密钥文件;

如果否,所述安全存储模块生成随机数,将所述随机数作为文件密钥,所述安全存储模块使用所述文件密钥对待写数据进行加密后存储以生成数据文件,根据所述加解密密钥对所述文件密钥进行加密得到新文件密钥文件,将新文件密钥文件存储为文件密钥文件。

14.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

步骤106具体为:

当安全访问接口为安全写接口时,根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对待写数据进行加密后存储,所述安全存储模块根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用所述预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对所述文件密钥加密得到新文件密钥文件,并将所述新文件密钥文件存储为文件密钥文件;

当安全访问接口为安全读接口时,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对读取的数据进行解密后获取解密数据,向所述应用程序返回所述解密数据,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对文件密钥进行加密得到新文件密钥文件,并将所述新文件密钥文件存储为文件密钥文件。

15.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

所述步骤106具体为:

当安全访问接口为安全写接口时,所述安全存储模块判断是否存在待写数据对应的数据文件,

如果是,所述安全存储模块根据所述数据文件读取数据,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对读取的数据进行解密得到解密数据,根据所述待写数据对所述解密数据进行修改,使用文件密钥对修改后的解密数据进行加密后存储以更新所述数据文件,所述安全存储模块根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对所述文件密钥进行加密得到新文件密钥文件,并将所述新文件密钥文件存储为文件密钥文件;

如果否,所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对待写数据进行加密后存储以生成数据文件,所述安全存储模块根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对所述文件密钥加密后得到新文件密钥文件,并将所述新文件密钥文件存储为文件密钥文件;

当安全访问接口为安全读接口时,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对读取的数据进行解密后获取解密数据,向所述应用程序返回所述解密数据,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对所述文件密钥进行加密后得到新文件密钥文件,并将新文件密钥文件存储为文件密钥文件。

16.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

所述步骤106具体为:

当安全访问接口为安全写接口时,所述安全存储模块生成随机数,将所述随机数作为文件密钥,使用文件密钥对待写数据进行加密后存储,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到加解密密钥,使用所述加解密密钥对所述文件密钥进行加密后得到文件密钥文件并存储;

当安全访问接口为安全读接口时,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解密后获取解密数据,向所述应用程序返回所述解密数据;生成随机数,将所述随机数作为新文件密钥,使用新文件密钥对所述解密数据进行加密和存储,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对新文件密钥进行加密后生成新文件密钥文件,将所述新文件密钥文件存储为文件密钥文件。

17.如权利要求1所述方法,其特征在于,所述安全存储模块的安全访问接口包括安全读接口和/或安全写接口;

步骤106具体为:

当所述安全访问接口为安全写接口时,所述安全存储模块判断是否存在待写数据对应的数据文件,

如果是,所述安全存储模块根据所述数据文件读取数据,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对读取的数据进行解密后得到解密数据,并根据待写数据对所述解密数据进行修改;生成随机数,将所述随机数作为新文件密钥,使用所述新文件密钥对修改后的解密数据进行加密后存储以更新所述数据文件,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对新文件密钥进行加密得到新文件密钥文件,将所述新文件密钥文件作为文件密钥文件;

如果否,所述安全存储模块生成随机数,将所述随机数作为文件密钥,使用所述文件密钥对写入数据进行加密后存储以生成数据文件,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到加解密密钥,使用所述加解密密钥对所述文件密钥进行加密后得到文件密钥文件并存储;

当所述安全访问接口为安全读接口时,所述安全存储模块根据所述向量数组和所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对所述第一新向量数组进行加密得到加解密密钥,所述安全存储模块读取文件密钥文件,使用所述加解密密钥对所述文件密钥文件进行解密得到文件密钥,使用所述文件密钥对读取的数据进行解密后获取解密数据,向所述应用程序返回所述解密数据;生成随机数,将所述随机数作为新文件密钥,使用所述新文件密钥对所述解密数据进行加密后存储,根据所述向量数组和所述预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对所述第二新向量数组进行加密得到新加解密密钥,使用所述新加解密密钥对所述新文件密钥进行加密得到新文件密钥文件,将所述新文件密钥文件存储为文件密钥文件。

18.如权利要求11所述方法,其特征在于,步骤106之前还包括:所述安全存储模块判断文件密钥文件是否存在,如果是,执行步骤106,如果否,当安全访问接口为安全写接口时,所述安全存储模块生成随机数,将所述随机数作为文件密钥,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥加密得到文件密钥文件,执行步骤106;

当安全访问接口为安全读接口时,所述安全存储模块报错。

19.一种处理数据的装置,其特征在于,所述装置包括至少一个处理器、存储器及存储在所述存储器上并可被所述至少一个处理器执行的指令,所述至少一个处理器执行所述指令以实现权利要求1至18任一项所述的方法。

20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至18任一项所述的方法。

21.一种芯片,其特征在于,所述芯片与存储器耦合,用于执行所述存储器中存储的计算机程序,以执行权利要求1至18任一项所述的方法。

说明书 :

一种处理数据的方法、装置、计算机可读存储介质及装置

技术领域

[0001] 本发明涉及信息安全领域,特别涉及一种处理数据的方法、装置、计算机可读存储介质及芯片。

背景技术

[0002] 伴随着移动设备的发展,移动设备存储安全也越来越重要。然而目前多数软件对数据的安全控制力度不足,容易造成数据的丢失与泄露。为了保护移动设备如手机上数据
的安全,需要对数据进行加解密处理,数据的加解密处理需要使用密钥,而现有技术中生成
密钥的参数通常比较单一,在多次需要重复生成密钥的过程中,生成密钥的参数容易被破
解,因此在数据的处理过程中存在安全隐患。

发明内容

[0003] 本发明提供了一种处理数据的方法、装置、计算机可读存储介质及芯片,解决了上述技术问题。
[0004] 本发明提供的一种的方法,该方法包括:
[0005] 当安全存储模块的安全访问接口被应用程序调用时,执行如下步骤:
[0006] 步骤101,安全存储模块判断是否存在预置数组的当前内存空间的初始地址和当前内存空间偏移地址,如果是,执行步骤103;
[0007] 如果否,执行步骤102;
[0008] 步骤102,安全存储模块根据预置的初始地址和预置的偏移地址获取预置数组,执行步骤104;
[0009] 步骤103, 安全存储模块根据预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组,执行步骤104;
[0010] 步骤104,安全存储模块根据获取的预置数组生成向量数组;
[0011] 步骤105,安全存储模块获取预置数组的新内存空间的初始地址和新内存空间偏移地址;
[0012] 步骤106,安全存储模块根据预置密钥和向量数组获取加解密密钥,根据加解密密钥对待处理数据进行处理;
[0013] 步骤107,安全存储模块根据预置数组的新内存空间的初始地址和新内存空间偏移地址存储预置数组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储
为预置数组的当前内存空间的初始地址和当前内存空间偏移地址。
[0014] 本发明还提供了一种处理数据的装置,该装置包括至少一个处理器、存储器及存储在存储器上并可被至少一个处理器执行的指令,至少一个处理器执行指令以实现上述方
法。
[0015] 本发明还提供了一种计算机可读存储介质,该计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,使得计算机执行上述方法。本发明还提供了一种芯
片,该芯片与存储器耦合,用于执行存储器中存储的计算机程序,以执行上述方法。
[0016] 本发明的有益效果:本发明提供了一种处理数据的方法、装置、计算机可读存储介质及芯片,通过本发明,在对数据读写的过程中,用于对数据的加解密所需的密钥的生成参
数的存储位置是随机变化的,有效的防止了密钥被泄露和破解,随机变化的存储位置还参
与了密钥的运算和生成,因此密钥不容易被破解,从而提高了数据处理过程中的安全性。

附图说明

[0017] 图1为本发明实施例一提供的一种处理数据的方法流程图;
[0018] 图2和图3为本发明实施例二提供的一种处理数据的方法流程图;
[0019] 图4为本发明实施例二中根据预置数组生成向量数组具体实现流程图;
[0020] 图5和图6为本发明实施例三提供的一种处理数据的方法流程图。

具体实施方式

[0021] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
[0022] 本申请所称加解密密钥为用于加密或解密的密钥。
[0023] 实施例一
[0024] 如图1所示,本实施例提供了一种处理数据的方法,包括:
[0025] 当安全存储模块的安全访问接口被应用程序调用时,执行如下步骤:
[0026] 步骤101,安全存储模块判断是否存在预置数组的当前内存空间的初始地址和当前内存空间偏移地址,如果是,执行步骤103;
[0027] 如果否,执行步骤102;
[0028] 步骤102,安全存储模块根据预置的初始地址和预置的偏移地址获取预置数组,执行步骤104;
[0029] 步骤103, 安全存储模块根据预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组,执行步骤104;
[0030] 步骤104,安全存储模块根据获取的预置数组生成向量数组;
[0031] 步骤105,安全存储模块获取预置数组的新内存空间的初始地址和新内存空间偏移地址;
[0032] 步骤106,安全存储模块使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对待处理数据进行处理;
[0033] 步骤107,安全存储模块根据预置数组的新内存空间的初始地址和新内存空间偏移地址存储预置数组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储
为预置数组的当前内存空间的初始地址和当前内存空间偏移地址。
[0034] 在本申请中,安全存储模块根据预置数组的新内存空间的初始地址和新内存空间偏移地址存储预置数组后还可以包括:安全存储模块将当前内存空间的初始地址和当前内
存空间偏移地址上的预置数组删除,不再赘述。
[0035] 在一种可能的实施方式中,步骤104中安全存储模块根据获取的预置数组生成向量数组具体为:安全存储模块将预置数组作为向量数组。
[0036] 在一种可能的实施方式中,步骤104中安全存储模块根据获取的预置数组生成向量数组包括如下步骤:
[0037] 步骤B101, 安全存储模块创建空数组,获取预设索引值,根据预设索引值获取预置数组中与其对应的数值作为预置向量,将预置向量记录到空数组得到当前向量数组,初
始化计数值;
[0038] 步骤B102, 安全存储模块将预设索引值作为上一个索引值,将预置向量作为上一个向量;
[0039] 步骤B103,所述安全存储模块根据所述上一个向量与所述预置数组的长度进行计算得到当前索引值,根据当前索引值获取预置数组中与其对应的数值作为当前向量, 将当
前向量顺序记录到当前向量数组,更新计数值;
[0040] 步骤B104, 安全存储模块根据计数值判断是否已获取到全部向量,如果是,执行步骤B106, 如果否,执行步骤B105;
[0041] 步骤B105, 安全存储模块将当前索引值设置为上一个索引值,将当前向量设置为上一个向量,返回步骤B103;
[0042] 步骤B106, 安全存储模块将当前向量数组作为向量数组。
[0043] 在一种可能的实施方式中,步骤104中安全存储模块根据获取的预置数组生成向量数组包括如下步骤:
[0044] 步骤M1, 安全存储模块读取设备标识文件中的设备标识;
[0045] 步骤M2, 安全存储模块将获取的预置数组按照预定的字节数进行分组,将各个分组分别与设备标识进行异或运算,将各个异或运算结果进行组合生成向量数组。
[0046] 在一种可能的实施方式中,步骤M1之前还包括:
[0047] 步骤M01, 安全存储模块判断设备标识文件是否存在,如果是,执行步骤M1, 如果否,执行步骤M02;
[0048] 步骤M02, 安全存储模块生成长度为预定的字节数的设备标识,根据设备标识生成设备标识文件并存储,执行步骤M2。
[0049] 在一种可能的实施方式中,步骤105中安全存储模块获取预置数组的新内存空间的初始地址和新内存空间偏移地址具体为:安全存储模块调用动态内存分配函数获取预置
数组的新内存空间的初始地址;安全存储模块调用随机数生成函数获取预置数组的新内存
空间偏移地址。
[0050] 在一种可能的实施方式中,随机数生成函数的输入参数的范围为大于0且小于内存空间的长度与预置数组长度的差值。
[0051] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;
[0052] 步骤106具体为:当安全访问接口为安全写接口时,安全存储模块根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置
密钥对第二新向量数组进行加密得到加解密密钥,使用加解密密钥对待写数据进行加密后
存储;
[0053] 当安全访问接口为安全读接口时,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,使用加解密密钥对读取的数据进行解密得到解密数
据,向所述应用程序返回所述解密数据,根据向量数组和预置数组的新内存空间的初始地
址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密
得到新加解密密钥,使用新加解密密钥对解密数据进行加密后存储。
[0054] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;
[0055] 步骤106具体为:当安全访问接口为安全写接口时安全存储模块判断是否存在待写数据对应的数据文件,
[0056] 如果是,安全存储模块根据数据文件读取数据,根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,使用加解密密钥对读取的数据进行解密得到解密数
据,根据待写数据对所述解密数据进行修改,安全存储模块根据向量数组和预置数组的新
内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新
向量数组进行加密得到新加解密密钥,使用新加解密密钥对修改后的数据进行加密后存储
以更新所述数据文件;
[0057] 如果否,安全存储模块根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到加解
密密钥,使用加解密密钥对待写数据进行加密后存储以生成数据文件;
[0058] 当安全访问接口为安全读接口时,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,所述安全存储模块读取数据,使用加解密密钥对读
取的数据进行解密得到解密数据,向所述应用程序返回所述解密数据,根据向量数组和预
置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密
钥对第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对解密数据进行加密
后存储。
[0059] 在一种可能的实施方式中,步骤106中的安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组具体为:根据所
述向量数组、所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址进行异或
运算得到第一新向量数组;
[0060] 根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组具体为:根据所述向量数组、所述预置数组的新内存空间的初始地址和新
内存空间偏移地址进行异或运算生成第二新向量数组;
[0061] 根据所述向量数组、所述预置数组的当前内存空间的初始地址和当前内存空间偏移地址进行异或运算得到第一新向量数组可以为:这三者中任意两者进行异或运算得到的
运算结果与第三者进行异或运算得到第一新向量数组;
[0062] 根据所述向量数组、所述预置数组的新内存空间的初始地址和新内存空间偏移地址进行异或运算生成第二新向量数组可以为:这三者中任意两者进行异或运算得到的运算
结果与第三者进行异或运算得到第二新向量数组。
[0063] 在一种可能的实施方式中:
[0064] 在步骤106之前还包括:安全存储模块判断文件密钥文件是否存在,如果是,执行步骤106,如果否,当安全访问接口为安全写接口时,安全存储模块生成随机数,将随机数作
为文件密钥,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件
密钥加密得到文件密钥文件,执行步骤106;当安全访问接口为安全读接口时,安全存储模
块报错;
[0065] 步骤106具体为:安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥文件进行解密得到文件密钥,安全存储
模块使用文件密钥对待处理数据进行处理。
[0066] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;
[0067] 步骤106具体为:
[0068] 当安全存储模块的安全访问接口为安全读接口时,安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥文件
进行解密得到文件密钥;安全存储模块读取数据,使用文件密钥对读取的数据进行解密得
到解密数据,向所述应用程序返回所述解密数据;生成随机数,将随机数作为新文件密钥,
安全存储模块使用新文件密钥对解密数据进行加密后存储;使用加解密密钥对新文件密钥
进行加密生成新文件密钥文件,将新文件密钥文件存储为文件密钥文件;
[0069] 当安全存储模块的安全访问接口为安全写接口时,安全存储模块生成随机数,将随机数作为文件密钥,安全存储模块使用文件密钥对待写数据进行加密后存储,根据加解
密密钥对文件密钥进行加密生成文件密钥文件并保存。
[0070] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;步骤106具体为:
[0071] 当安全存储模块的安全访问接口为安全读接口时,安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥文件
进行解密得到文件密钥;安全存储模块读取数据,使用文件密钥对读取的数据进行解密后
获取解密数据,向所述应用程序返回所述解密数据;生成随机数,将随机数作为新文件密
钥,安全存储模块使用新文件密钥对解密数据进行加密后存储;根据加解密密钥对新文件
密钥进行加密得到新文件密钥文件,将新文件密钥文件存储为文件密钥文件;
[0072] 当安全存储模块的安全访问接口为安全写接口时,安全存储模块判断是否存在待写数据对应的数据文件,
[0073] 如果是,安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥文件进行解密得到文件密钥;安全存储模块根
据数据文件读取数据,使用文件密钥对读取的数据进行解密后获取解密数据,根据所述待
写数据对所述解密数据进行修改,生成随机数,将随机数作为新文件密钥, 使用新文件密
钥对修改后的数据进行加密后存储以更新所述数据文件,安全存储模块使用加解密密钥对
新文件密钥进行加密得到新文件密钥文件,将新文件密钥文件存储为文件密钥文件;
[0074] 如果否,安全存储模块生成随机数,将随机数作为新文件密钥,安全存储模块使用新文件密钥对待写数据进行加密后存储以生成数据文件,根据加解密密钥对新文件密钥进
行加密得到新文件密钥文件,将新文件密钥文件存储为文件密钥文件。
[0075] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口,
[0076] 在步骤106之前还包括:安全存储模块判断文件密钥文件是否存在,如果是,执行步骤106,如果否,当安全访问接口为安全写接口时,安全存储模块生成随机数,将随机数作
为文件密钥,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件
密钥加密得到文件密钥文件,执行步骤106;当安全访问接口为安全读接口时,安全存储模
块报错;
[0077] 步骤106具体为:当安全访问接口为安全写接口时,
[0078] 根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行加密得到加解密密钥,安全存
储模块读取文件密钥文件,使用加解密密钥对文件密钥文件进行解密得到文件密钥,使用
文件密钥对待写数据进行加密后存储,安全存储模块根据向量数组和预置数组的新内存空
间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数
组进行加密得到新加解密密钥,使用新加解密密钥对文件密钥加密得到新文件密钥文件,
并将新文件密钥文件存储为文件密钥文件;
[0079] 当安全访问接口为安全读接口时,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥
对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解密后获取解密
数据,向应用程序返回所述解密数据,根据向量数组和预置数组的新内存空间的初始地址
和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得
到新加解密密钥,使用新加解密密钥对文件密钥进行加密得到新文件密钥文件,并将新文
件密钥文件存储为文件密钥文件。
[0080] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;
[0081] 在步骤106之前还包括:安全存储模块判断文件密钥文件是否存在,如果是,执行步骤106,如果否,当安全访问接口为安全写接口时,安全存储模块生成随机数,将随机数作
为文件密钥,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件
密钥加密得到文件密钥文件,执行步骤106;当安全访问接口为安全读接口时,安全存储模
块报错;
[0082] 步骤106具体为:当安全访问接口为安全写接口时,安全存储模块安全存储模块判断是否存在待写数据对应的数据文件,
[0083] 如果是,安全存储模块根据数据文件读取数据,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预
置密钥对第一新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使
用加解密密钥对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解
密得到解密数据,根据所述待写数据对解密数据进行修改,,使用文件密钥对修改后的解密
数据进行加密后存储以更新所述数据文件,安全存储模块根据向量数组和预置数组的新内
存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向
量数组进行加密得到新加解密密钥,使用新加解密密钥对文件密钥进行加密得到新文件密
钥文件,并将新文件密钥文件存储为文件密钥文件;
[0084] 如果否,根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行加密得到加解密密钥,
安全存储模块读取文件密钥文件,使用加解密密钥对文件密钥文件进行解密得到文件密
钥,使用文件密钥对待写数据进行加密后存储以生成数据文件,安全存储模块根据向量数
组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用
预置密钥对第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对文件密钥加
密后得到新文件密钥文件,并将新文件密钥文件存储为文件密钥文件;
[0085] 当安全访问接口为安全读接口时,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥
对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解密后获取解密
数据,向应用程序返回解密数据,根据向量数组和预置数组的新内存空间的初始地址和新
内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新
加解密密钥,使用新加解密密钥对文件密钥进行加密后得到新文件密钥文件,并将新文件
密钥文件存储为文件密钥文件。
[0086] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;
[0087] 步骤106具体为:
[0088] 当安全访问接口为安全写接口时,安全存储模块生成随机数,将随机数作为新文件密钥,使用新文件密钥对写入数据进行加密后存储,根据向量数组和预置数组的新内存
空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量
数组进行加密得到加解密密钥,使用加解密密钥对新文件密钥进行加密后得到新文件密钥
文件并存储,并将新文件密钥文件存储为文件密钥文件;
[0089] 当安全访问接口为安全读接口时,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥
对文件密钥文件进行解密得到文件密钥,使用文件密钥对数据进行解密后获取解密数据,
向所述应用程序返回所述解密数据;生成随机数,将随机数作为新文件密钥,使用新文件密
钥对所述解密数据进行加密和存储,根据向量数组和预置数组的新内存空间的初始地址和
新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到
新加解密密钥,使用新加解密密钥对新文件密钥进行加密后生成新文件密钥文件,将新文
件密钥文件存储为文件密钥文件。
[0090] 在一种可能的实施方式中,安全存储模块的安全访问接口包括安全读接口和/或安全写接口;
[0091] 步骤106具体为:当安全访问接口为安全写接口时,安全存储模块判断所述安全存储模块判断是否存在待写数据对应的数据文件,
[0092] 如果是,安全存储模块根据数据文件读取数据,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预
置密钥对第一新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使
用加解密密钥对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解
密后得到解密数据,并根据待写数据对解密数据进行修改,生成随机数,将随机数作为新文
件密钥,使用新文件密钥对修改后的解密数据进行加密后存储以更新数据文件,根据向量
数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使
用预置密钥对第二新向量数组进行加密得到新加解密密钥,使用加新解密密钥对新文件密
钥进行加密得到新文件密钥文件,将新文件密钥文件作为文件密钥文件;
[0093] 如果否,安全存储模块生成随机数,将随机数作为新文件密钥,使用新文件密钥对写入数据进行加密后存储以生成数据文件,根据向量数组和预置数组的新内存空间的初始
地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加
密得到加解密密钥,使用加解密密钥对新文件密钥进行加密后得到新文件密钥文件,并将
新文件密钥文件存储为文件密钥文件;
[0094] 当安全访问接口为安全读接口时,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一
新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥
对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解密后获取解密
数据,向应用程序返回所述解密数据;生成随机数,将随机数作为新文件密钥,使用所述新
文件密钥对所述解密数据进行加密后存储,根据向量数组和预置数组的新内存空间的初始
地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加
密得到新加解密密钥,使用新加解密密钥对新文件密钥进行加密得到新文件密钥文件,将
新文件密钥文件存储为文件密钥文件。
[0095] 实施例二
[0096] 如图2和图3所示,本实施例提供了一种处理数据的方法,包括:
[0097] 当安全存储模块的安全写接口被APP(应用程序)调用时,执行步骤201;当安全存储模块的安全读接口被APP调用时,执行步骤301;
[0098] 在本实施例中,安全写接口可以为自定的接口函数,例如:writeFile(unsigned char *inData, unsigned int inLen, unsigned char *filePath),其中inData表示原
文,inLen表示原文长度,filePath表示文件路径;
[0099] 安全读接口可以为自定的接口函数,例如:readFile(unsigned char *outData, unsigned int outLen, unsigned char *filePath),其中outData用于接收读取到的数
据,outLen用于接收读取到的数据的长度,filePath表示文件路径;
[0100] 在本实施例中,安全读接口和安全写接口为安全访问接口。
[0101] 在本实施例中,安全访问接口包括但不限于安全读接口和安全写接口。
[0102] 步骤201,安全存储模块判断是否存在预置密钥,如果是,执行步骤203;如果否,执行步骤202;
[0103] 在本步骤中,在iOS系统下,安全存储模块调用系统的密钥获取函数,获取调用结果为密钥数据,即预置密钥,根据密钥数据的长度判断是否存在预置密钥;系统的密钥获取
函数具体为:objectForKey,输入参数为键的信息,具体为:kSecAttrDescription;
[0104] 本步骤具体为:安全存储模块调用objectForKey函数,获取调用结果为密钥数据,判断调用结果的数据长度,当调用结果的数据长度不为0时,存在预置密钥,当调用结果的
数据长度为0时,不存在预置密钥。
[0105] 在本步骤中,在Android 系统下,安全存储模块调用密钥查询函数判断是否存在预置密钥;
[0106] 系统的密钥查询函数具体为:isPreKeyExist,
[0107] 本步骤具体为:安全存储模块调用isPreKeyExis函数,获取调用结果,判断调用结果是否为0,如果为0,则表示预置密钥 不存在,如果不为0,则表示预置密钥存在。
[0108] 步骤202,安全存储模块生成预置密钥,生成文件密钥, 对文件密钥进行哈希运算,生成第一哈希值,根据安全存储模块中存储的预置数组生成向量数组,使用预置密钥对
向量数组进行加密,得到加解密密钥,使用加解密密钥对文件密钥和第一哈希值进行加密
得到文件密钥加密数据,根据文件密钥加密数据生成文件密钥文件,执行步骤206;
[0109] 安全存储模块生成预置密钥具体为:安全存储模块使用自定义的密钥生成函数接口生成预置密钥,并将预置密钥存到系统的安全区域;
[0110] 其中在iOS系统下,安全存储模块将预置密钥存储到系统的安全区域KeyChain中;
[0111] 在Android系统下,安全存储模块将预置密钥存储到系统的安全区域KeyStore中;
[0112] 在本步骤中,例如,安全存储模块生成预置密钥:{0x48,0x3C,0x42,0xF5,0x49,0xF6,0x33,0xA0,0xD4,0xE7,0xF9,0xE1,0x85,0x0B,0x77,0xE6},生成文件密钥{0x93,
0xF2,0x3A,0xE2,0x29,0x20,0xE3,0x13,0x67,0xEB,0x29,0x77,0x68,0x62,0x86,0x3F},
对文件密钥进行哈希运算,生成第一哈希值:{0x6C,0x1B,0x3F,0xC3,0x47,0x24,0x60,
0x39,0x08,0x91,0x7B,0x11,0x00,0x86,0x90,0xC3,0x86,0x38,0x9C,0xD6,0x3E,0xC2,
0x13,0xA4,0x58,0x27,0x4D,0xF0,0xB3,0xB1,0x58,0x53};
[0113] 在本实施例中,步骤202中,生成文件密钥具体为,生成随机数,将随机数作为文件密钥。
[0114] 在本实施例中,步骤202中,根据安全存储模块中存储的预置数组生成向量数组具体包括如下步骤:
[0115] 步骤B101, 安全存储模块判断是否存在预置数组存储的当前内存空间的初始地址和当前内存空间偏移地址,如果是,执行步骤B103;
[0116] 如果否,执行步骤B102;
[0117] 步骤B102,安全存储模块根据预置的初始地址和预置的偏移地址获取预置数组,执行步骤104;
[0118] 步骤B103, 安全存储模块根据预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组,;
[0119] 步骤B104, 安全存储模块根据获取的预置数组生成向量数组;
[0120] 步骤B105, 安全存储模块获取预置数组的新内存空间的初始地址和新内存空间偏移地址;
[0121] 具体的,安全存储模块调用系统的动态内存分配函数获取预置数组的新内存空间的初始地址;
[0122] 具体的,在本步骤中,安全存储模块调用系统的动态内存分配函数malloc (size_t size),其中参数size为内存空间的长度,获取系统返回的结果,即为预置数组的新内存
空间的初始地址;
[0123] 安全存储模块调用系统的随机数生成函数获取预置数组的新内存空间偏移地址;
[0124] 在本步骤中,安全存储模块调用系统的随机数生成函数rand(int range),获取系统返回的结果,即为预置数组的新内存空间偏移地址;其中,参数range的范围为大于0 且
小于内存空间的长度与预置数组长度的差值;
[0125] 在本实施例中,如图4所示,根据获取的预置数组生成向量数组具体包括如下步骤:
[0126] 步骤a1, 安全存储模块创建空数组,获取预设索引值,根据预设索引值获取预置数组中与其对应的数值作为预置向量,将预置向量记录到空数组得到当前向量数组,记录
计数值;
[0127] 步骤a2, 安全存储模块将预设索引值作为上一个索引值,将预置向量作为上一个向量;
[0128] 步骤a3, 安全存储模块获取上一个向量与第一预定值的取余结果,计算取余结果、上一个索引值和第二预定值三者的和,获取的和与预置数组的长度取余得到当前索引
值,根据当前索引值得到预置数组中与其对应的数值作为当前向量, 将当前向量顺序记录
到当前向量数组,并将计数值加1得到当前计数值;
[0129] 优选的,在本步骤中,第一预定值为128,第二预定值为64;
[0130] 步骤a4, 安全存储模块判断当前计数值是否等于预定计数值,如果是,执行步骤a6, 如果否,执行步骤a5;
[0131] 具体的,预定计数值为16。
[0132] 步骤a5, 安全存储模块将当前索引值设置为上一个索引值,将当前向量设置为上一个向量,返回步骤a3;
[0133] 步骤a6, 安全存储模块将当前向量数组作为向量数组。
[0134] 例如, 在本步骤中,安全存储模块获取的预置数组为:{0xdd,0x9c,0xb4,0x8a,0x7a,0x4e,0xd9,0xe6,0x42,0xe8,0xbe,0x9c,0x08,0x68,0xaf,0x86,0x45,0x07,0xde,
0x81,0x22,0x15,0x21,0x9a,0x91,0xb2,0xc8,0x85,0x0e,0x47,0x74,0xdc,0xb7,0xe1,
0xb8,0x24,0xba,0xe5,0x9d,0x67,0x50,0xe8,0x07,0xf5,0x92,0xa4,0x0e,0x67,0x5d,
0x9b,0x10,0xcd,0x9c,0x3b,0xce,0x97,0x7a,0x25,0x38,0xe4,0x85,0x50,0x3e,0xd3,
0xe7,0x94,0x6e,0x44,0x61,0x3e,0x2c,0x6f,0xfe,0xb5,0xf4,0xc1,0xab,0x73,0xa4,
0x26,0xed,0xe8,0x53,0x89,0xf2,0x9a,0x53,0xe6,0x58,0xb1,0x2b,0x0b,0xeb,0x6c,
0xa9,0x30,0x29,0xde,0x19,0x4b,0x4a,0x73,0x6f,0x7e,0xf0,0xf4,0x0c,0x98,0x57,
0x41,0x08,0xaf,0x4a,0xbc,0x4c,0x96,0x65,0xb8,0x68,0xcc,0x85,0xbb,0x80,0xa2,
0xf0,0x0e,0x1a,0x8b,0xae,0x21,0x07,0x4d,0xdd,0x3c,0xf5,0xdd,0xba,0x1e,0x4f,
0xb2,0x5f,0xba,0x81,0x3b,0x2f,0x0d,0x68,0x57,0xac,0x4f,0x90,0x43,0x4f,0x5f,
0x10,0x9a,0x37,0x55,0xa3,0x95,0xbb,0xdc,0x24,0xd1,0xd2,0xf4,0x8e,0x50,0xea,
0xcf,0xc6,0x9e,0xc7,0x2b,0x66,0xb5,0xa7,0xae,0x61,0x7f,0x81,0x84,0xaf,0x7c,
0x81,0xab,0xd0,0x38,0x50,0x4b,0x58,0x33,0x71,0x29,0x74,0x04,0x8e,0x70,0xa6,
0x20,0x4a,0xfa,0x39,0x99,0x4a,0xf3,0xee,0x09,0x38,0x49,0x96,0x9f,0x0b,0x11,
0x3b,0xfa,0x2a,0x5d,0xc2,0xe6,0x32,0xf2,0xdf,0x2c,0xee,0x7e,0x76,0x7c,0xc3,
0xb8,0x96,0x25,0x9f,0x05,0x04,0xe0,0x07,0xa3,0x35,0x7c,0x71,0xf2,0xd5,0xc1,
0xff,0x3a,0xf5,0xe0,0x66,0x14,0x13,0x2d,0x66,0xd2,0x2e,0xe1,0x5f,0xdd,0x60,
0xe8,0x0a,0x11,0xae,0xc8,0x8a,0xc8,0x44,0xf5,0x73,0xf7,0x3c,0x58,0x58,0x2e,
0x47,0xc0,0xe0,0x0c,0xfb,0x1e,0x45,0xf4,0x10,0xc8,0x13,0x6f,0x73,0x1c,0xae,
0x2f,0x76,0x30,0x70,0x5c,0x3d,0xa5,0x3c,0x38,0x49,0xf4,0xdb,0x4e,0x0d,0xa8,
0x0a,0x6e,0x1a,0xa8,0x31,0x2f,0x14,0x59,0x47,0x49,0xf0,0xc2,0x12,0xb2,0xfb,
0x10,0xf1,0xd6,0x07,0xed,0xb0,0x5d,0x8a,0xe0,0xeb,0x74,0x1d,0xbf,0xf3,0xcc,
0xac,0x31,0x89,0x31,0xcf,0x53,0xc0,0xa5,0x56,0xf4,0xd7,0x0d,0x3b,0xc6,0xc4,
0x96,0x3b,0x3a,0x8c,0x53,0x5b,0xa0,0x60,0xd2,0xff,0xf9,0x00,0x9d,0x01,0xfe,
0xc1,0xd2,0x2c,0x03,0x57,0x21,0xe6,0x5f,0x6b,0x1d,0xb7,0x11,0xbc,0xa7,0xe3,
0x88,0xd4,0x03,0xa2,0x26,0x63,0x0e,0xde,0x56,0x2b,0xca,0xc6,0xd9,0x9b,0xbd,
0x17,0xf0,0xc5,0x56,0xfb,0x63,0x7c,0xd1,0x65,0x7f,0x12,0x6f,0x4d,0xdb,0x06,
0xbb,0xa1,0xcc,0xc2,0x4f,0x78,0x9a,0x29,0xa9,0x60,0x1c,0x60,0x35,0x4f,0x65,
0xac,0xe1,0xc6,0x13,0x77,0x13,0xde,0x4d,0x45,0x94,0x18,0xcf,0xb1,0x3b,0xf3,
0x8e,0x47,0xcd,0xaa,0x6a,0xd8,0xc0,0x28,0x2d,0x5c,0x2d,0xad,0x4f,0x1e,0xee,
0x8e,0x84,0x1d,0xa9,0xdc,0xd7,0xc1,0x77,0xd6,0x42,0xb6,0x43,0x03,0xea,0xed,
0xff,0xaf,0x41,0x7d,0x21,0x82,0x3b,0xa3,0x28,0xb6,0xe8,0x45,0x32,0xc0,0x4c,
0xbf,0xea,0x56,0x5b,0x23,0x5f,0x6f,0xb3,0x00,0xc5,0x71,0x81,0xed,0xb3,0x0f,
0xa8,0x2b,0x06,0xad,0x85,0x12,0x04,0x85,0x0f,0xfa,0x1c,0x39,0x5b,0xa0,0x0a,
0x1b,0x1c,0x7c,0x85,0x1a,0x61,0x25,0x19,0xe0,0xb1,0x1f,0xdb,0x55,0x11,0x43,
0x5b,0xdf,0xb8,0x44,0xd3,0xd5,0x20,0xfa,0xb6,0xd5,0x3a,0x94,0xb0,0xe6,0xff,
0x6c,0x6d,0xad,0x34,0xa2,0xaa,0x2d,0xb1,0x0f,0x57,0x77,0x89,0x9a,0x59,0x13,
0x5f,0xfd,0x47,0xfc,0xe0,0xdc,0x51,0x75,0x8a,0x0f,0xf2,0x2c,0x66,0x94,0x2d,
0x44,0x6d,0x17,0x1f,0xdc,0xb2,0xf3,0xbd,0x4c,0xeb,0x0d,0xd4,0xeb,0x11,0x43,
0x88,0xb0,0x0e,0x9a,0x49,0xa5,0x77,0x0c,0xf8,0x04,0x4a,0x35,0x9f,0x1b,0x26,
0x46,0x96,0x9d,0x97,0x83,0xa9,0xca,0x45,0x20,0xf2,0x67,0x77,0x58,0x18,0x04,
0xf5,0x30,0xe3,0xc7,0xd7,0xbb,0xbc,0xd3,0x1a,0x0a,0x94,0x76,0xbb,0xc6,0x49,
0xff,0x7c,0x1e,0x3d,0xba,0x68,0x98,0xf7,0x97,0x6f,0xb7,0xbb,0x8c,0x70,0x66,
0x99,0xee,0x27,0xa7,0x53,0x8d,0x7d,0x4b,0x00,0xdf,0x9e,0x2e,0x7a,0x1a,0x40,
0xcf,0x0d,0x20,0x61,0x04,0x87,0x9d,0x0b,0x5c,0x92,0x45,0x08,0x04,0x27,0x9e,
0x0c,0x52,0x1c,0xff,0xfc,0xe7,0xab,0x70,0x0d,0xa7,0xc2,0x27,0xfb,0x87,0xbb,
0xf3,0xd7,0x80,0x99,0x0b,0xc6,0x34,0xb0,0x2c,0xb2,0x79,0x1d,0x3d,0x22,0xac,
0x72,0x25,0x95,0x3e,0x8b,0xae,0x9b,0x4a,0x9b,0x5f,0x07,0xfc,0x7b,0xe4,0x17,
0xec,0x26,0xf7,0xf7,0x94,0xac,0x05,0x71,0x16,0x7e,0xa9,0x77,0x45,0x83,0x80,
0x3c,0xee,0x22,0x89,0x58,0x5d,0xf2,0xbc,0x19,0x91,0x3c,0x88,0xc9,0x70,0xd0,
0x79,0xe3,0xfc,0x4c,0xcf,0x04,0xfb,0x80,0xb5,0xe6,0xa4,0x34,0x37,0xe6,0xc0,
0x48,0x96,0x29,0x5c,0xdd,0xb9,0x59,0xf6,0xda,0x00,0x86,0x4f,0xf2,0xe2,0x54,
0xf7,0xcd,0x36,0xd0,0x9e,0x07,0xc5,0xec,0x65,0x34,0x18,0x01,0xc9,0x2d,0x95,
0x64,0x72,0x04,0xbe,0xba,0x85,0x09,0x7b,0x4d,0x97,0xb9,0x8a,0x3a,0xb2,0x15,
0x2e,0xed,0xe2,0x93,0x9f,0x96,0x70,0x26,0x41,0xea,0x04,0x28,0xee,0x70,0x89,
0x21,0x8e,0x57,0x31,0x60,0xc6,0xa1,0xb5,0x32,0xbd,0xc9,0xbe,0xc9,0x50,0x82,
0x02,0x23,0xa6,0xdf,0x1c,0x6c,0x17,0xc0,0x1c,0x8a,0xfa,0x7b,0xe4,0x89,0x85,
0x80,0x64,0x5f,0x21,0xb0,0x72,0x85,0x5f,0xe7,0xd7,0x6e,0xf4,0x6c,0xfd,0x11,
0x2d,0x20,0xef,0xec,0xc3,0x9d,0x0a,0xa7,0xf3,0xff,0x97,0xc4,0x4e,0x16,0xd3,
0x14,0x4b,0x4d,0xab,0x63,0x49,0x36,0xe4,0x3a,0x07,0xa7,0x2a,0x54,0xdf,0x82,
0xfa,0xbf,0x17,0x3e,0xd0,0xdd,0xf8,0xa2,0xf3,0x46,0xe6,0xb9,0xbc,0x58,0xa3,
0xa4,0x43,0x87,0x86,0x8a,0x86,0x9f,0xb3,0xf4,0x6e,0x00,0x09,0xbd,0xb4,0x7b,
0xa0,0x78,0xa0,0x11,0xf1,0x4a,0x1b,0xfd,0xce,0x15,0xed,0x83,0x98,0x18,0x09,
0x75,0x0c,0x5c,0xd6,0xbe,0x4b,0x14,0xd8,0xa5,0xa7,0x58,0xae,0x0d,0x22,0x7f,
0xa2,0x14,0xc7,0x45,0x8a,0x08,0xac,0x2f,0x8b,0x28,0x0d,0x74,0xc6,0x9c,0xfd,
0xc7,0xb2,0x9a,0x38,0x8f,0x1e,0x8d,0xb2,0xfd,0xa1,0x3f,0x9f,0x52,0x60,0x21,
0x67,0x40,0xef,0x88,0xdd,0xc8,0x7e,0x8a,0xb2,0xfc,0x69,0x20,0xc0,0xad,0x91,
0x8b,0xa9,0xeb,0xf1,0xd1,0xe0,0x68,0xdd,0x92,0x91,0x41,0x84,0xa8,0x4b,0x7b},
预设索引值为10,预设索引值获取预置数组中与其对应的数值为0xbe,将0xbe记录到空数
组以生成当前向量数组,记录计数值为1, 将预设索引值10作为上一个索引值,并将预置向
量0xbe作为上一个向量,安全存储模块获取上一个向量0xbe与第一预定值128的取余结果
62、上一个索引值10和第二预定值64的和136,获取的和136与预置数组的长度1024取余得
到当前索引值136,根据当前索引值得到预置数组中与其对应的数值0xba作为当前向量, 
将当前向量顺序记录到当前向量数组,并将计数值加1得到当前计数值2,当判断当前计数
值小于16时,则将当前索引值136设置为上一个索引值,将当前向量0xba设置为上一个向
量,再次执行步骤a6,依次类推,直到当前计数值等于16时,则生成的当前向量数组具体为:
{0xbE,0xba,0x60,0x60,0xDC,0xA9,0xC9,0xC6,0x53,0x05,0x0D,0x88,0x4F,0xA5,0xD7,
0xA6},即为根据获取的预置向量数组生成的向量数组。
[0135] 在本实施例中,步骤202中的根据获取的预置数组生成向量数组还可以通过如下步骤实现:
[0136] 步骤b1, 安全存储模块判断设备标识文件是否存在,如果是,执行步骤b2, 如果否,执行步骤b4 ;
[0137] 步骤b2, 安全存储模块读取设备标识文件中的设备标识,执行步骤b3;
[0138] 步骤b3, 安全存储模块获取预置数组,将预置数组按照预定的字节数进行分组,将各个分组分别与设备标识进行异或运算,将各个异或运算结果进行组合生成向量数组;
[0139] 步骤b4, 安全存储模块生成设备标识,根据设备标识生成设备标识文件并存储,执行步骤b3。
[0140] 具体的,在本步骤中,安全存储模块按照预定的次数调用系统的Rand函数,得到预定位数的设备标识。
[0141] 在本实施例中,步骤202 中,根据安全存储模块的预置数组生成向量数组还可以为:安全存储模块将预置数组作为向量数组。
[0142] 在步骤202中使用预置密钥对向量数组进行加密,得到加解密密钥具体为:
[0143] 在iOS系统下,安全存储模块根据生成的预置密钥对向量数组进行加密得到加解密密钥;
[0144] 在Android系统下,安全存储模块调用系统的预置密钥加密函数,获取系统返回的加密密钥;
[0145] 具体的,安全存储模块调用preKeyEncrypt函数,其中输入参数是向量数组和向量数组的长度,获取调用结果,调用结果即为加解密密钥;
[0146] 在本实施例中,使用的加解密密算法可以是但不限于SM4、DES、3DE、AES算法。
[0147] 本实施例以AES算法和SM4算法为例加以说明,其中与加解密密钥相关的加密解密算法使用的是AES算法,其他的加解密算法是SM4算法。
[0148] 安全存储模块使用加密密钥对文件密钥和第一哈希值进行加密得到文件密钥加密数据, 根据文件密钥加密数据生成文件密钥文件: {0x04,0x80,0x6E,0xC2,0xAD,0xB1,
0x3F,0x82,0x79,0xB6,0xD8,0xF4,0x03,0x1A,0xA7,0x2C,0x12,0x98,0x0B,0x70,0x22,
0x44,0x42,0x48,0x71,0xE5,0x04,0xE6,0x2B,0x1F,0x01,0xA5,0x6E,0x79,0x11,0x92,
0xFF,0x8F,0xC5,0x04,0x15,0x23,0xCA,0xFA,0x96,0xB3,0x71,0x11,0x8D,0xCF,0x4B,
0x86,0xEA,0x99,0xE8,0xB3,0xA8,0x1F,0x92,0x3D,0x30,0xFA,0x21,0xC0}。
[0149] 步骤203,安全存储模块判断是否存在文件密钥文件,如果是,执行步骤204, 如果否,结束;
[0150] 在本实施例中,本步骤中,安全存储模块调用系统的文件查询函数判断是否存在文件密钥文件;
[0151] 具体的,文件查询函数为:access(const char* path, int mode),其中输入参数path表示文件路径,安全存储模块调用文件查询函数获取调用结果,当调用结果为0时,则
文件密钥文件存在,当调用结果为‑1时,则文件密钥文件不存在。
[0152] 步骤204,安全存储模块读取文件密钥文件,根据安全存储模块中存储的预置数组生成向量数组,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文
件密钥文件进行解密得到文件密钥以及第二哈希值;
[0153] 在本实施例中,安全存储模块调用系统读文件函数读取文件密钥文件,例如,系统读文件函数具体为: ize_t fread(void* const __pass_object_size0 buf, size_t 
size, size_t count, FILE* stream),其中输入参数为:接收数据变量,读取的每个元素
大小,读取的元素个数,文件对象指针;
[0154] 例如,读取的文件密钥文件为: {0x04,0x80,0x6E,0xC2,0xAD,0xB1,0x3F,0x82,0x79,0xB6,0xD8,0xF4,0x03,0x1A,0xA7,0x2C,0x12,0x98,0x0B,0x70,0x22,0x44,0x42,
0x48,0x71,0xE5,0x04,0xE6,0x2B,0x1F,0x01,0xA5,0x6E,0x79,0x11,0x92,0xFF,0x8F,
0xC5,0x04,0x15,0x23,0xCA,0xFA,0x96,0xB3,0x71,0x11,0x8D,0xCF,0x4B,0x86,0xEA,
0x99,0xE8,0xB3,0xA8,0x1F,0x92,0x3D,0x30,0xFA,0x21,0xC0} ,
[0155] 在本步骤中,根据安全存储模块中存储的预置数组生成向量数组与步骤202中根据安全存储模块中存储的预置数组生成向量数组相同,不再赘述。
[0156] 在本步骤中使用预置密钥对向量数组进行加密得到加解密密钥具体为:
[0157] 在iOS系统下,安全存储模块根据步骤202中获取的预置密钥对向量数组进行加密得到加解密密钥;
[0158] 在Android系统下,安全存储模块调用系统的预置密钥加密函数,获取系统返回的加解密密钥;
[0159] 具体的,安全存储模块调用preKeyEncrypt函数,其中输入参数是向量数组和向量数组的长度,获取调用结果,调用结果即为加解密密钥;
[0160] 例如,使用预置密钥对向量数组{0xBE,0xBA,0x60,0x60,0xDC,0xA9,0xC9,0xC6,0x53,0x05,0x0D,0x88,0x4F,0xA5,0xD7,0xA6}根据AES算法进行加密得到加解密密钥: 
{0xD8,0x19,0xE8,0xF7,0xC7,0x85,0x1C,0xA0,0x23,0xD1,0x65,0xB1,0xAF,0xB6,0xDE,
0x3F}。
[0161] 步骤205,安全存储模块对文件密钥进行哈希运算得到第三哈希值,判断第二哈希值与第三哈希值是否相同,如果是,执行步骤206,如果否,安全存储模块删除文件密钥文
件,结束;
[0162] 步骤206,安全存储模块使用文件密钥对将安全写接口的传入参数中的待写数据和待写数据的哈希值进行加密得到加密写入数据;
[0163] 在本步骤中,安全存储模块对待写数据进行哈希运算生成待写数据的哈希值。
[0164] 步骤207,安全存储模块根据安全写接口的传入参数中的文件名和文件路径判断是否存在与文件名和文件路径对应的数据文件,如果是,执行步骤208,如果否,安全存储模
块根据安全写接口的传入参数中的文件名和文件路径创建数据文件,执行步骤208;
[0165] 在本步骤中,安全存储模块调用文件查询函数判断是否存在与文件名和文件路径对应的数据文件;
[0166] 具体的,文件查询函数为:access(const char* path, int mode),其中输入参数path表示文件路径,安全存储模块调用文件查询函数获取调用结果,当调用结果为0时,则
存在与文件名和文件路径对应的数据文件,当调用结果为‑1时,则不存在与文件名和文件
路径对应的数据文件。
[0167] 步骤208,安全存储模块将加密写入数据存储到数据文件,结束;
[0168] 在本实施例中,本步骤中,安全存储模块将加密写入数据存储到文件后,还包括:安全存储模块根据预置数组的新内存空间的初始地址和新内存空间偏移地址存储预置数
组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储为预置数组的当前
内存空间的初始地址和当前内存空间偏移地址。
[0169] 步骤301,安全存储模块判断是否存在预置密钥,如果是,执行步骤302, 如果否,结束;
[0170] 在本步骤中,在iOS系统下,安全存储模块调用系统的密钥获取函数,获取调用结果为密钥数据即预置密钥,根据密钥数据的长度判断是否存在预置密钥;系统的密钥获取
函数具体为:objectForKey,输入参数为键的信息,具体为:kSecAttrDescription;
[0171] 本步骤具体为:安全存储模块调用objectForKey函数,获取调用结果为密钥数据,判断调用结果的数据长度,当调用结果的数据长度不为0时,存在预置密钥,当调用结果的
数据长度为0时,不存在预置密钥。
[0172] 在本步骤中,在Android 系统下,安全存储模块调用密钥查询函数判断是否存在预置密钥;
[0173] 系统的密钥查询函数具体为:isPreKeyExist,
[0174] 本步骤具体为:安全存储模块调用isPreKeyExis函数,获取调用结果,判断调用结果是否为0,如果为0,则表示预置密钥 不存在,如果不为0,则表示预置密钥存在。
[0175] 步骤302, 安全存储模块判断是否存在文件密钥文件,如果是,执行步骤303,如果否,结束;
[0176] 在本实施例中,本步骤中,安全存储模块调用系统的文件查询函数判断是否存在文件密钥文件;
[0177] 具体的,文件查询函数为:access(const char* path, int mode),其中输入参数path表示文件路径,安全存储模块调用文件查询函数获取调用结果,当调用结果为0时,则
文件密钥文件存在,当调用结果为‑1时,则文件密钥文件不存在。
[0178] 步骤303,安全存储模块读取文件密钥文件,根据安全存储模块中存储的预置数组生成向量数组,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文
件密钥文件进行解密得到文件密钥以及第四哈希值;
[0179] 本步骤中,根据安全存储模块中存储的预置数组生成向量数组与步骤202中根据安全存储模块中存储的预置数组生成向量数组相同,不再赘述。
[0180] 在本步骤中,安全存储模块获取预置向量组的过程与上述步骤B101‑B103的执行过程相同, 不再赘述。
[0181] 在本实施例中,安全存储模块调用系统读文件函数读取文件密钥文件,例如,系统读文件函数具体为: ize_t fread(void* const __pass_object_size0 buf, size_t 
size, size_t count, FILE* stream),其中输入参数为:接收数据变量,读取的每个元素
大小,读取的元素个数,文件对象指针;
[0182] 读取的文件密钥文件为: {0x04,0x80,0x6E,0xC2,0xAD,0xB1,0x3F,0x82,0x79,0xB6,0xD8,0xF4,0x03,0x1A,0xA7,0x2C,0x12,0x98,0x0B,0x70,0x22,0x44,0x42,0x48,
0x71,0xE5,0x04,0xE6,0x2B,0x1F,0x01,0xA5,0x6E,0x79,0x11,0x92,0xFF,0x8F,0xC5,
0x04,0x15,0x23,0xCA,0xFA,0x96,0xB3,0x71,0x11,0x8D,0xCF,0x4B,0x86,0xEA,0x99,
0xE8,0xB3,0xA8,0x1F,0x92,0x3D,0x30,0xFA,0x21,0xC0} ,
[0183] 在本步骤中使用预置密钥对向量数组进行加密得到加解密密钥具体为:
[0184] 在iOS系统下,安全存储模块根据预置密钥对向量数组进行加密得到加解密密钥;
[0185] 在Android系统下,安全存储模块调用系统的预置密钥加密函数,获取系统返回的加密密钥;
[0186] 具体的,安全存储模块调用preKeyEncrypt函数,其中输入参数是向量数组和向量数组的长度,获取调用结果,调用结果即为加密密钥;
[0187] 步骤304,安全存储模块对文件密钥进行哈希运算得到第五哈希值,判断第四哈希值与第五哈希值是否相同,如果是,执行步骤305,如果否,结束;
[0188] 步骤305,安全存储模块根据安全读接口的传入参数中的文件名和文件路径判断是否存在与文件名和文件路径对应的数据文件,如果是,执行步骤306,如果否,结束;
[0189] 在本步骤中,安全存储模块调用第二系统函数判断是否存在与文件名和文件路径对应的文件,第二系统函数为文件查询函数;
[0190] 具体的,文件查询函数为:access(const char* path, int mode),其中输入参数path表示文件路径,安全存储模块调用文件查询函数获取调用结果,当调用结果为0时,则
存在与文件名和文件路径对应的文件,当调用结果为‑1时,则不存在与文件名和文件路径
对应的文件。
[0191] 步骤306,安全存储模块使用文件密钥对数据文件进行解密得到文件数据和第六哈希值;
[0192] 步骤307,安全存储模块对文件数据进行哈希运算得到第七哈希值,判断第六哈希值与第七哈希值是否相同,如果是,执行步骤308,如果否,结束;
[0193] 步骤308,安全存储模块将文件数据发送给APP,结束。
[0194] 在本实施例中,本步骤中,安全存储模块将文件数据发送给APP之前或者之后,还包括:安全存储模块根据预置数组的新内存空间的初始地址和新内存空间偏移地址存储预
置数组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储为预置数组的
当前内存空间的初始地址和当前内存空间偏移地址。
[0195] 实施例三
[0196] 如图5和图6所示,本实施例提供了一种处理数据的方法,包括:
[0197] 当安全存储模块的安全写接口被APP(应用程序)调用时,执行步骤401;当安全存储模块的安全读接口被APP调用时,执行步骤501;
[0198] 步骤401,安全存储模块判断是否存在预置密钥,如果是,执行步骤403,如果否,执行步骤402;
[0199] 步骤402,安全存储模块生成预置密钥,执行步骤403;
[0200] 步骤403,安全存储模块根据预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组;
[0201] 步骤404,安全存储模块根据预置数组生成向量数组;
[0202] 步骤405,安全存储模块获取预置数组的新内存空间的初始地址和新内存空间偏移地址;
[0203] 步骤406,安全存储模块使用预置密钥对向量数组进行加密,得到加解密密钥,使用加解密密钥对待写数据进行加密后存储;
[0204] 步骤407,安全存储模块根据新内存空间的初始地址和新内存空间偏移地址存储预置数组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储为预置数组
的当前内存空间的初始地址和当前内存空间偏移地址;结束。
[0205] 步骤501,安全存储模块根据安全读接口的传入参数中的文件名和文件路径中判断是否存在与文件名和文件路径对应的数据文件,如果是,执行步骤502;如果否,结束。
[0206] 步骤502,安全存储模块根据数据文件读取数据;
[0207] 步骤503,安全存储模块判断是否存在预置密钥,如果是,执行步骤504,如果否,结束;
[0208] 步骤504,安全存储模块根据预置数组的当前内存空间的初始地址和当前内存空间偏移地址获取预置数组;
[0209] 步骤505,安全存储模块根据预置数组生成向量数组;
[0210] 步骤506,安全存储模块获取预置数组的新内存空间的初始地址和新内存空间偏移地址;
[0211] 步骤507,安全存储模块使用预置密钥对向量数组进行加密得到加解密密钥,
[0212] 步骤508,安全存储模块使用加解密密钥对读取的数据进行解密,得到解密数据;
[0213] 步骤509,安全存储模块根据新内存空间的初始地址和新内存空间偏移地址存储预置数组,并将预置数组的新内存空间的初始地址和新内存空间偏移地址存储为预置数组
的当前内存空间的初始地址和当前内存空间偏移地址;
[0214] 步骤510,安全存储模块将解密数据发送给APP,结束。
[0215] 在本实施例中一种可能的实施方式中,步骤404和步骤505中的安全存储模块根据预置数组生成向量数组具体为:安全存储模块将预置数作为向量数组。
[0216] 在本实施例一种可能的实施方式中,步骤406具体为:安全存储模块根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预
置密钥对第二新向量数组进行加密得到加解密密钥,使用加解密密钥对数据进行加密后存
储;
[0217] 步骤508具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行
加密得到加解密密钥,使用加解密密钥对读取的数据进行解密得到解密数据,向所述应用
程序返回所述解密数据,根据向量数组和预置数组的新内存空间的初始地址和新内存空间
偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解密密
钥,使用新加解密密钥对读取的数据进行加密后存储。
[0218] 在本实施例中一种可能的实施方式中,步骤406之前还包括:安全存储模块判断数据文件是否存在,
[0219] 如果是,步骤406具体为:安全存储模块根据数据文件读取数据,根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用
预置密钥对第一新向量数组进行加密得到加解密密钥,使用加解密密钥对读取的数据进行
解密得到解密数据,对解密数据进行修改,安全存储模块根据向量数组和预置数组的新内
存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向
量数组进行加密得到新加解密密钥,使用新加解密密钥对修改后的解密数据进行加密后存
储以更新数据文件;
[0220] 如果否,步骤406具体为:安全存储模块根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进
行加密得到加解密密钥,使用加解密密钥对待写数据进行加密后存储以生成数据文件;
[0221] 步骤508具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行
加密得到加解密密钥,安全存储模块读取数据,使用加解密密钥对读取的数据进行解密得
到解密数据,向应用程序返回解密数据,根据向量数组和预置数组的新内存空间的初始地
址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密
得到新加解密密钥,使用新加解密密钥对解密数据进行加密后存储;
[0222] 其中,根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组具体为:将向量数组、预置数组的当前内存空间的初始地址和当
前内存空间偏移地址进行异或运算得到第一新向量数组;
[0223] 根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组具体为:将向量数组、预置数组的新内存空间的初始地址和新内存空间偏
移地址进行异或运算生成第二新向量数组。
[0224] 在本实施例中一种可能的实施方式中, 步骤508具体为:安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密
钥文件进行解密得到文件密钥;安全存储模块根据数据文件读取数据,使用文件密钥对读
取的数据进行解密后得到解密数据,向应用程序返回解密数据;生成随机数,将所随机数作
为新文件密钥,使用新文件密钥对解密数据进行加密后存储,使用加解密密钥对新文件密
钥进行加密生成新文件密钥文件,将新文件密钥文件存储为文件密钥文件;
[0225] 步骤406具体为:安全存储模块根据数据文件读取数据,根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥
对第一新向量数组进行加密得到加解密密钥,安全存储模块生成随机数,将随机数作为文
件密钥,安全存储模块使用文件密钥对待写数据进行加密后存储,根据加解密密钥对文件
密钥进行加密生成文件密钥文件并保存。
[0226] 在本实施例中一种可能的实施方式中,步骤508具体为:
[0227] 安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥文件进行解密得到文件密钥;安全存储模块读取数据,使
用文件密钥对读取得数据进行解密后得到解密数据,向应用程序返回解密数据;生成随机
数,将随机数作为新文件密钥,安全存储模块使用新文件密钥对解密数据进行加密后存储
以更新数据文件;根据加解密密钥对新文件密钥进行加密得到新文件密钥文件,将新文件
密钥文件保存为文件密钥文件;
[0228] 步骤406具体为:安全存储模块判断是否存在待写数据对应的数据文件,
[0229] 如果是,安全存储模块读取文件密钥文件,使用预置密钥对向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥文件进行解密得到文件密钥;安全存储模块根
据数据文件读取数据,使用文件密钥对读取的数据进行解密后得到解密数据,对解密数据
进行修改,生成随机数,将随机数作为新文件密钥, 使用新文件密钥对修改后的解密数据
进行加密后存储以更新数据文件,安全存储模块使用加解密密钥对新文件密钥进行加密得
到新文件密钥文件,将新文件密钥文件保存为文件密钥;
[0230] 如果否,安全存储模块生成随机数,将随机数作为文件密钥,安全存储模块使用文件密钥对待写数据进行加密后存储,根据加解密密钥对文件密钥进行加密得到文件密钥文
件并保存。
[0231] 在本实施例中一种可能的实施方式中,步骤406具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,
使用预置密钥对第一新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文
件,使用加解密密钥对文件密钥文件进行解密得到文件密钥,使用文件密钥对待写数据进
行加密后存储,安全存储模块根据向量数组和预置数组的新内存空间的初始地址和新内存
空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解
密密钥,使用新加解密密钥对文件密钥加密得到新文件密钥文件,并将新文件密钥文件存
储为文件密钥文件;
[0232] 步骤508具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行
加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥对文件密钥文件
进行解密得到文件密钥,使用文件密钥对读取的数据进行解密后获取解密数据,向应用程
序返回解密数据,根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地
址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解密密钥,使
用新加解密密钥对文件密钥进行加密得到新文件密钥文件,并将新文件密钥文件存储为文
件密钥文件。
[0233] 在本实施例中一种可能的实施方式中,步骤406包括:
[0234] 安全存储模块判断数据文件是否存在,
[0235] 如果是,安全存储模块根据数据文件读取数据,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预
置密钥对第一新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使
用加解密密钥对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解
密后得到解密数据,对解密数据进行修改,使用文件密钥对修改后的解密数据进行加密后
存储以更新数据文件,安全存储模块根据向量数组和预置数组的新内存空间的初始地址和
新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到
新加解密密钥,使用新加解密密钥对文件密钥进行加密得到新文件密钥文件,并将新文件
密钥文件存储为文件密钥文件;
[0236] 如果否,向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行加密得到加解密密钥,安全
存储模块读取文件密钥文件,使用加解密密钥对文件密钥文件进行解密得到文件密钥,使
用文件密钥对待写数据进行加密后存储以生成数据文件,安全存储模块根据向量数组和预
置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密
钥对第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对文件密钥加密后得
到新文件密钥文件,并将新文件密钥文件存储为文件密钥文件;
[0237] 步骤508具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行
加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥对文件密钥文件
进行解密得到文件密钥,使用文件密钥对读取的数据进行解密获取解密数据,向应用程序
返回解密数据,根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址
生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解密密钥,使用
加解密密钥对文件密钥进行加密后得到新文件密钥文件,并将新文件密钥文件存储为文件
密钥文件。
[0238] 在本实施例中一种可能的实施方式中,步骤406具体为:安全存储模块生成随机数,将随机数作为文件密钥,使用文件密钥对待写数据进行加密后存储,根据向量数组和预
置数组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密
钥对第二新向量数组进行加密得到加解密密钥,使用加解密密钥对文件密钥进行加密后得
到文件密钥文件并存储;
[0239] 步骤508具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行
加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥对文件密钥文件
进行解密得到文件密钥,使用文件密钥对读取的数据进行解密,向应用程序返回所述解密
数据;生成随机数,将随机数作为新文件密钥,使用新文件密钥对所述解密数据进行加密后
存储以更新数据文件,根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏
移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到新加解密密
钥,使用新加解密密钥对新文件密钥进行加密后生成新文件密钥文件,将新文件密钥文件
存储为文件密钥文件。
[0240] 在本实施例中一种可能的实施方式中,步骤406包括:安全存储模块判断数据文件是否存在,
[0241] 如果是,安全存储模块根据数据文件读取数据,安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预
置密钥对第一新向量数组进行加密得到加解密密钥,安全存储模块读取文件密钥文件,使
用加解密密钥对文件密钥文件进行解密得到文件密钥,使用文件密钥对读取的数据进行解
密后得到解密数据,并对解密数据进行修改,生成随机数,将随机数作为新文件密钥,使用
新文件密钥对修改后的解密数据进行加密后存储以更新数据文件,根据向量数组和预置数
组的新内存空间的初始地址和新内存空间偏移地址生成第二新向量数组,使用预置密钥对
第二新向量数组进行加密得到新加解密密钥,使用新加解密密钥对新文件密钥进行加密得
到新文件密钥文件,将新文件密钥文件作为文件密钥文件;
[0242] 如果否,安全存储模块生成随机数,将随机数作为文件密钥,使用文件密钥对写入数据进行加密后存储以生成数据文件,根据向量数组和预置数组的新内存空间的初始地址
和新内存空间偏移地址生成第二新向量数组,使用预置密钥对第二新向量数组进行加密得
到加解密密钥,使用加解密密钥对文件密钥进行加密后得到文件密钥文件并存储;
[0243] 步骤508具体为:安全存储模块根据向量数组和预置数组的当前内存空间的初始地址和当前内存空间偏移地址生成第一新向量数组,使用预置密钥对第一新向量数组进行
加密得到加解密密钥,安全存储模块读取文件密钥文件,使用加解密密钥对文件密钥文件
进行解密得到文件密钥,使用文件密钥对读取的数据进行解密向应用程序返回解密数据;
生成随机数,将随机数作为新文件密钥,使用新文件密钥对解密数据进行加密并存储以更
新数据文件;根据向量数组和预置数组的新内存空间的初始地址和新内存空间偏移地址生
成第二新向量数组,使用预置密钥对第二新向量数组进行加密得到加解密密钥,使用新加
解密密钥对新文件密钥进行加密得到新文件密钥文件,将新文件密钥文件存储为文件密钥
文件。
[0244] 可选的,本申请的实施例还提供了一种处理数据的装置,此装置包括至少一个处理器、存储器及存储在该存储器上并可被至少一个处理器执行的指令,至少一个处理器执
行该指令以实现上述实施例中的一种处理数据的方法。该装置是芯片系统时,可以由芯片
构成,也可以包含芯片和其他分立器件,本申请实施例对此不作具体限定;该芯片与存储器
耦合,用于执行存储器中存储的计算机程序,以执行上述实施例中公开的处理数据的方法。
[0245] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机
程序产品包括一个或多个计算机程序。在加载和执行计算机程序时,全部或部分地产生按
照本申请实施例的流程或功能。该计算机程序可以存储在计算机可读存储介质中,或者从
一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一
个基站、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital 
subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个基站、服务器或数
据中心进行传输。计算机可读存储介质可以是本发明的装置能够存取的任何可用介质或者
是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是
磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、 或者半导体介质(例如固态硬盘
(solid state disk,SSD))等。
[0246] 尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看附图、公开内容、以及所附权利要求书,可理解并实现公
开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步
骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的
若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组
合起来产生良好的效果。
[0247] 以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在
本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。