一种数据检查方法及计算设备与流程

文档序号:26278713发布日期:2021-08-13 19:35阅读:86来源:国知局
一种数据检查方法及计算设备与流程

本发明涉及计算机技术领域,特别涉及一种数据检查方法及计算设备。



背景技术:

目前,在对元数据加密时,为防止数据信息泄露一般会将文件数据分为固定大小的块文件。对攻击者来而言,即便获得这些块文件也无法获取元数据的目录结构、文件名、文件大小等信息。但,这些加密后的块文件在传输或存储过程中,数据内容还是有可能被攻击者篡改,具体篡改手段例如包括修改块文件后部数据、用老版本的块文件进行替换、恢复已被删除的块文件等。

根据现有技术中的方案,在块文件中增加id检查。具体地,程序生成一个随机id值作为块文件的文件名,并将该id值存储于块文件头部。如果攻击者用其它内容的块文件进行替换,在程序进行自检时会根据文件名和解密后块文件中的id进行对比,如果不相等,说明该块文件被替换或者修改。这种方案无法覆盖多个场景,当攻击者恢复删除后的块文件,或者用之前老版本的文件进行替换,该方案便无法满足检查要求。

现有技术中还有一种方案,是在块文件中增加id号的同时,增加一个版本号,同一时刻下所有的块文件的版本都是相同的,如果攻击者想用之前版本的块文件进行替换,在检查版本号时会发现版本号不一致。这种方案也无法覆盖多个场景,该方法只能防止攻击者对块文件进行替换,而无法防止攻击者对数据进行篡改,并且,该方案通过对每个块文件计算一个哈希值,在检查时遍历并对比所有的值是否相等,由于元数据加密生成的块文件数量较多,全量的数据遍历对比不仅耗时,而且会大幅降低程序性能。

可见,根据现有技术中的数据完整性检查方法,仅可以解决部分上述问题,无法覆盖多个场景,并且,检查效率较低。

为此,需要一种数据检查方法来解决上述技术方案中存在的问题。



技术实现要素:

为此,本发明提供一种数据检查方法,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供了一种数据检查方法,在计算设备中执行,包括步骤:获取文件数据对应的多个块文件,所述多个块文件中包括数据检查过程中生成的过程数据;检查被删除块文件是否存在于删除列表中,以确定被删除块文件是否恢复;分别计算多个块文件的哈希值,根据多个块文件的哈希值计算得到待验证根哈希值;以及将所述待验证根哈希值与所述计算设备中存储的根哈希值进行比较,以确定所述文件数据是否被修改。

可选地,在根据本发明的数据检查方法中,还包括步骤:获取数据检查过程中生成的过程数据,所述过程数据包括与检查被删除块文件是否恢复相对应的第一过程数据、以及与检查文件数据是否被修改相对应的第二过程数据;将所述过程数据存储在相应的块文件中,以便对所述过程数据进行检查。

可选地,在根据本发明的数据检查方法中,获取文件数据对应的多个块文件包括:实时获取所述过程数据对应的块文件。

可选地,在根据本发明的数据检查方法中,将所述过程数据存储在相应的块文件中包括:将所述第一过程数据、第二过程数据分别存储在第一块文件、第二块文件中。

可选地,在根据本发明的数据检查方法中,所述第一块文件包括第一标识,第二块文件包括第二标识,所述第一标识和第二标识适于存储在根文件系统,获取文件数据对应的多个块文件的步骤包括:从根文件系统获取第一标识和第二标识;基于第一标识获取第一块文件,基于第二标识获取第二块文件。

可选地,在根据本发明的数据检查方法中,检查被删除块文件是否存在于删除列表中的步骤包括:基于多个哈希函数分别对被删除块文件进行计算,得到散列值集;根据所述散列值集确定存储结构中相应的多个比特位,如果每个比特位均为目标值,则确定所述被删除块文件存在于删除列表中。

可选地,在根据本发明的数据检查方法中,确定被删除块文件是否恢复的步骤包括:如果被删除块文件存在于删除列表中,则确定所述被删除块文件没有被恢复;确定所述文件数据是否被修改的步骤包括:如果所述待验证根哈希值与所述计算设备中存储的根哈希值相等,则确定所述文件数据没有被修改。

可选地,在根据本发明的数据检查方法中,在获取文件数据对应的多个块文件之前,包括步骤:对文件数据加密生成多个块文件;分别计算多个块文件的哈希值,根据多个块文件的哈希值计算得到根哈希值;将所述根哈希值保存在计算设备中。

可选地,在根据本发明的数据检查方法中,基于布隆过滤器实时检查被删除块文件是否存在于删除列表中,以确定被删除块文件是否恢复;基于merkletree根据多个块文件的哈希值计算得到待验证根哈希值。

可选地,在根据本发明的数据检查方法中,如果确定所述被删除块文件没有被恢复,并且,确定所述文件数据没有被修改,则确定所述文件数据完整。

根据本发明的一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述的数据检查方法的指令。

根据本发明的一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述方法。

根据本发明的技术方案,提供了一种数据检查方法,在对加密后的文件数据进行检查时,基于文件数据对应的多个块文件的哈希值来计算根哈希值,通过对根哈希值进行校验来判断文件数据是否被修改,校验根哈希值的方式明显更简单,从而在检查数据是否修改时花费的时间更少,有利于提高数据检查效率。并且,通过将数据检查过程中产生的过程数据存储在相应的块文件,在对文件数据进行检查过程中,还会对产生的过程数据进行检查。这样,能实现对文件数据进行完整性检查过程的安全闭环,确保数据安全可靠。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的计算设备100的示意图;

图2示出了根据本发明一个实施例的数据检查方法200的流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1是示例计算设备100的示意框图。

如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。

取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(up)、微控制器(uc)、数字信息处理器(dsp)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。

取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。

计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138。

计算设备100还可以包括储存接口总线134。储存接口总线134实现了从储存设备132(例如,可移除储存器136和不可移除储存器138)经由总线/接口控制器130到基本配置102的通信。操作系统120、应用122以及程序数据124的至少一部分可以存储在可移除储存器136和/或不可移除储存器138上,并且在计算设备100上电或者要执行应用122时,经由储存接口总线134而加载到系统存储器106中,并由一个或者多个处理器104来执行。

计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图像处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个a/v端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个i/o端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中以编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(rf)、微波、红外(ir)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

计算设备100可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备100也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、数码照相机、个人数字助理(pda)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。甚至可以被实现为服务器,如文件服务器、数据库服务器、应用程序服务器和web服务器等。本发明的实施例对此均不做限制。

在根据本发明的实施例中,计算设备100被配置为执行根据本发明的数据检查方法200。其中,计算设备100的应用122中包含用于执行本发明的数据检查方法200的多条程序指令,这些程序指令可以被计算设备100读取并执行,以便计算设备100执行根据本发明的数据检查方法200。

需要说明的是,在执行本发明的数据检查方法200之前,通过对文件数据(元数据)进行加密,生成与文件数据相对应的多个块文件,以便基于加密后的多个块文件来进行数据的传输或者存储。随后,分别计算多个块文件的哈希值,并根据多个块文件的哈希值进行合并计算得到根哈希值,将根哈希值保存在计算设备本地,以便用于在数据检查过程中对数据进行校验。

在一个实施例中,可以基于merkletree(默克尔树)来对多个块文件对应的多个哈希值进行从下往上的合并计算,最终计算得到根哈希值。

应当指出,本发明不限制对文件数据进行加密的具体方法,现有技术中所有能实现对元数据进行加密的方法均在本发明的保护范围之内。

根据本发明的数据检查方法200,可以对文件数据对应的多个块文件进行完整性检查,以检查文件数据对应的多个块文件在传输或存储过程中是否被篡改、数据是否完整。

图2示出了根据本发明一个实施例的数据检查方法200的流程图。

如图2所示,方法200始于步骤s210。

在步骤s210中,获取文件数据对应的多个块文件。

随后,在步骤s220中,实时检查被删除块文件是否存在于删除列表中,以确定被删除块文件是否恢复。这里,删除列表用于记录被删除文件。具体地,如果被删除块文件存在于删除列表中,则确定被删除块文件没有被恢复。反之,如果被删除块文件不在删除列表中,则确定被删除块文件被恢复。

根据一个实施例,计算设备中包括布隆过滤器(bloomfilter),这里,布隆过滤器的bloom算法用于判断某个元素是否在某个集合中,从而可以基于布隆过滤器(bloomfilter)判断元素是否在集合中的方法来来实时检查被删除块文件是否存在于删除列表中,以便确定被删除文件是否恢复。

在步骤s230中,分别计算多个块文件的哈希值,根据多个块文件的哈希值计算得到待验证根哈希值。

随后,在步骤s240中,将待验证根哈希值与计算设备本地存储的根哈希值进行比较,以确定文件数据(文件数据对应的多个块文件)是否被修改。具体地,如果待验证根哈希值与计算设备本地存储的根哈希值相等,则确定文件数据对应的多个块文件没有被修改;反之,如果待验证根哈希值与计算设备本地存储的根哈希值不相等,则确定文件数据对应的多个块文件被修改。

应当指出,根据发明的数据检查方法,如果在步骤s210中确定被删除块文件没有被恢复,并且,在步骤s240中确定文件数据没有被修改,则可以确定文件数据完整,即对文件数据的完整性检查通过,没有被篡改。

根据一个实施例,可以利用merkletree来检查文件数据是否被修改。具体地,基于merkletree来根据多个块文件的哈希值计算待验证的根哈希值,即,基于merkletree对多个块文件对应的多个哈希值进行从下往上的合并计算得到待验证根哈希值。进而,通过将待验证根哈希值与计算设备本地存储的根哈希值进行比较,来判断文件数据是否被修改。

基于merkletree计算根哈希值的具体实现方法如下:

首先假设存在数据块{datablock1,datablock2,datablock3,datablock4},基于哈希函数分别对这些数据块进行哈希计算,得到相应的哈希值{h1,h2,h3,h4}。随后,进一步对{h1,h2,h3,h4}进行哈希计算,得到{h12,h34},具体地,通过对h1和h2进行哈希计算得到h12,对h3和h4进行哈希计算得到h34。最后,对h12和h34进行哈希计算得到最终的根哈希值h1234。

需要说明的是,本发明基于多个块文件的哈希值计算根哈希值,通过对根哈希值进行校验来判断文件数据是否被修改,这样,相比于现有技术中校验多个块文件的哈希值,本发明中校验根哈希值的方式明显更简单,花费的时间更少,很大程度上提高了数据检查的效率。

根据本发明的实施例,在步骤s210中获取的多个块文件中还包括在根据本发明的方法200执行的数据检查过程中生成的过程数据。具体而言,在对文件数据检查过程中,即在执行步骤s220~s240过程中,实时获取数据检查过程中产生的过程数据,过程数据具体包括与步骤s220中检查被删除块文件是否恢复相对应的第一过程数据、以及与步骤s230~s240中检查文件数据是否被修改相对应的第二过程数据。并且,将获取到的第一、第二过程数据存储在相应的块文件中。这样,在执行步骤s210时,可以实时获取过程数据对应的块文件,也即是,获取的多个块文件包括过程数据对应的块文件,以便在执行方法200时同步对过程数据进行完整性检查。

根据一个实施例,可以对第一过程数据、第二过程数据分开存储。具体地,将第一过程数据存储在第一块文件中,将第二过程数据存储在第二块文件。其中,第一块文件包括与其唯一相对应的第一标识,第二块文件包括与其唯一相对应的第二标识。在一种实施方式中,可以将第一标识、第二标识存储在根文件系统的预定位置,从而实现对过程数据进行嵌套存储,能防止数据泄露。基于此,在获取文件数据对应的多个块文件时,首先从根文件系统的预定位置获取第一标识和第二标识,随后,可以基于第一标识获取第一块文件,基于第二标识获取第二块文件,从而便获取到过程数据对应的块文件,这样,能实现在执行本发明的方法200时对检查过程中产生的过程数据进行检查。

需要说明的是,本发明通过将数据检查过程中产生的过程数据存储在相应的块文件,在对文件数据进行检查过程中,还会对产生的过程数据进行检查。应当理解,当过程数据被修改,同样会导致待验证的根哈希值发生改变、校验不通过。这样,实现了对文件数据进行完整性检查过程的安全闭环,确保数据安全可靠。

根据一个实施例,在执行方法200之前,如果文件数据的块文件被删除,会将被删除块文件记录在删除列表中。在一个实施例中,可以基于布隆过滤器(bloomfilter)来记录被删除块文件。

具体地,获取多个(m个)比特位的数组,将每个比特位初始化为0。并获取多个(k个)哈希函数,k个哈希函数例如为{hash1,hash2,…hashk},基于k个哈希函数分别对被删除的块文件b进行计算,得到块文件b对应的散列值集{h1,h2,…hk}。最后,根据散列值集在相应的存储结构中的位置,将比特位设置为1。这里,1即是在后续检查被删除块文件是否恢复时进行比对的目标值。

相应地,根据一个实施例,基于bloomfilter判断元素是否在集合中的方法来检查被删除块文件是否存在于删除列表中具体可以根据以下步骤执行:

首先,基于多个哈希函数分别对被删除块文件t进行计算,得到散列值集。具体地,基于k个哈希函数{hash1,hash2,…hashk}分别对被删除的块文件t进行计算,得到被删除块文件t对应的散列值集{h1,h2,…hk},这里,这里,h1=hash1(t),h2=hash2(t)…hk=hashk(t)。

随后,根据散列值集确定存储结构中相应的多个比特位,如果每个比特位均为目标值1,则确定被删除块文件t存在于删除列表中,也就说明被删除文件t没有被恢复。反之,如果存在一个或多个比特位的值不是目标值(值为0),则确定被删除文件不在删除列表中,也就说明被删除文件被恢复。

以下具体说明根据本发明的方法200在对检查被删除块文件时,对被删除文件的查询效率方面的优势:

这里,文件的大小表示为size,块文件的固定大小表示为f,那么块文件的数量为。可以理解,如果f值较小,则会在对文件数据加密时生成大量的块文件,这样会造成程序难以运行,并降低程序对文件的操作效率。基于此,现在主流的适用于元数据的加密工具,块文件的大小一般为32kb左右,采用这种加密工具,如果要存储1gb的文件数据,则要生成大约32768个块文件,导致在实际使用中会造成块文件数量过多。以下假定要插入的块文件个数n=,来对被删除块文件的查询效率进行分析:

这里先列出bloomfilter的一些计算公式:

公式一:最优的数组大小为:

公式二:最优的hash函数个数:

在一个实施例中,假设此时假正例概率p=0.0001,n个块文件都已被插入,经过公式一计算后,得到最优数组大小约为。经过公示二计算后,得到最优hash函数个数约为个。

采用现有的方案在查询时,如果某个元素在集合内,采用常规的map结构,那么最坏情况下要执行次遍历校验,同时查询c个元素则要执行次。如果某个元素不在集合内,采用常规的map结构,必须要遍历次才可以得到查询结果。而采用本发明提供的方案,仅需要执行k次查询校验,如果同时查询c个元素,那么执行次。对现有技术方案与本发明技术方案的查询次数进行对比,得到比值。在本实施例中,。如果某个元素不在集合内,那么在集合中第一次查询到的概率大约为,最坏的情况下需要查询k次。

可见,根据本发明的技术方案,对被删除块文件的查询效率得到了大幅提升,从而能够提升数据检查效率。

根据本发明的数据检查方法200,在对加密后的文件数据进行检查时,基于文件数据对应的多个块文件的哈希值来计算根哈希值,通过对根哈希值进行校验来判断文件数据是否被修改,校验根哈希值的方式明显更简单,从而在检查数据是否修改时花费的时间更少,有利于提高数据检查效率。并且,通过将数据检查过程中产生的过程数据存储在相应的块文件,在对文件数据进行检查过程中,还会对产生的过程数据进行检查。这样,能实现对文件数据进行完整性检查过程的安全闭环,确保数据安全可靠。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd-rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的多语言垃圾文本的识别方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1