一种云端存储数据的方法及服务器与流程

文档序号:12037891阅读:418来源:国知局
一种云端存储数据的方法及服务器与流程

本发明涉及计算机云存储技术领域,尤其涉及一种云端存储数据的方法及服务器。



背景技术:

目前,市场上的各类云存储产品越来越多,许多科技公司都推出了自身的云存储产品,越来越多的用户和企业也倾向于将数据存储在云存储上。随着用户数量以及云存储上的数据量的不断增长,云存储上数据存储和管理的开销也越来越大。由于在每年骤增的数据中有许多数据是重复的,如系统镜像、电影或歌曲等等,因而,云存储通常对其存储的数据采取一些去重处理,以减小云存储中的数据量,从而节省云存储的存储和管理开销。

由于每个用户都会向云存储中上传数据,现有技术中,云存储通常可每隔一段时间整理一次其存储的数据,对重复的数据只保留一份,从而降低存储的数据量,以节省数据存储和管理的开销。然而,一方面,这种方法对于云存储来说,对数据进行去重之前,需要存储重复的文件,浪费了存储空间,而且,进行定时的扫描和去重处理,也需要消耗较大的计算能力,因此,数据去重的效率比较低;另一方面,对于用户来说,用户每次上传文件时都需要上传整个文件,对于云存储中已存在的大文件来说,这样的上传方式,浪费了用户的上传带宽和上传时间。

综上所述,目前亟需要一种云端存储数据的方法,用以解决现有技术中的数据去重的效率较低、计算量较大,浪费用户的上传带宽和上传时间的技术问题。



技术实现要素:

本发明提供一种云端存储数据的方法,用以解决现有技术中的数据去重的效率较低、计算量较大,浪费用户的上传带宽和上传时间的技术问题。

本发明实施例提供的一种云端存储数据的方法,所述方法包括:

第一服务器接收客户端发送的用于上传第一文件的文件上传请求;所述文件上传请求是所述客户端接收到用户的文件上传指令后发送的,所述文件上传请求中包括所述客户端根据所述第一文件计算得到的第一数字指纹;

所述第一服务器根据所述第一数字指纹,计算得到所述第一文件的第二数字指纹,并根据所述第一文件的第二数字指纹,查询区块链数据库;

所述第一服务器若确定所述区块链数据库中存储有所述第一文件的第二数字指纹,则记录所述用户对所述第一文件的所有权,并向所述客户端发送第一指示信息;所述第一指示信息用于指示所述客户端不再上传所述第一文件;所述区块链数据库中存储有多个服务器中所存储的文件的第二数字指纹,所述第一服务器为所述多个服务器中的任一服务器。

可选地,所述方法还包括:

所述第一服务器若确定所述区块链数据库中未存储有所述第一文件的第二数字指纹,则向所述客户端发送第二指示信息,并将所述第一文件的第二数字指纹写入所述区块链数据库;第二指示信息用于指示所述客户端上传所述第一文件。

可选地,所述文件上传请求中还包括对所述第一文件的加密处理指示;

所述第一服务器确定所述区块链数据库中存储有所述第一文件的第二数字指纹之后,还包括:

所述第一服务器记录所述用户对第一加密文件的所有权,并向所述客户端发送第一指示信息;所述第一加密文件为所述客户端根据所述加密处理指示对所述第一文件进行加密得到的,所述第一指示信息用于指示所述客户端不再上传所述第一加密文件。

可选地,所述方法还包括:

所述第一服务器接收所述客户端发送的用于下载第二文件的文件下载请求;所述文件下载请求中包括所述第二文件的第一数字指纹;

所述第一服务器根据所述第二文件的第一数字指纹,计算所述第二文件的第二数字指纹,并根据所述第二文件的第二数字指纹,以及文件的第二数字指纹和服务器的标识的对应关系,若确定与所述第二文件的第二数字指纹对应的服务器的标识为所述第一服务器的标识,则将自身存储的所述第二文件发送给所述客户端;若确定与所述第二文件的第二数字指纹对应的服务器的标识为第二服务器的标识,则指示所述第二服务器将所述第二文件发送给所述客户端,所述第二服务器为所述多个服务器中的另一服务器。

可选地,所述第一服务器指示所述第二服务器将所述第二文件发送给所述客户端,包括:

所述第一服务器根据私钥计算对随机信息的第一数字签名;

所述第一服务器向所述第二服务器发送重定向请求,所述重定向请求中包括所述第一数字签名、所述随机信息和公钥;所述重定向请求用于所述第二服务器根据所述第一数字签名、所述随机信息和公钥验证所述第一数字签名合法后,将所述第二文件发送给所述客户端。

本发明实施例还提供另一种云端存储数据的方法,所述方法包括:

客户端接收用户的文件上传指令,并根据所述文件上传指令,确定出待上传的第一文件;

所述客户端根据所述第一文件,计算得到第一数字指纹;

所述客户端根据所述第一数字指纹,向服务器发送文件上传请求;所述文件上传请求中包括所述第一数字指纹;

所述客户端接收所述服务器发送的指示信息,若确定所述指示信息为第一指示信息,则不上传所述第一文件;若确定所述指示信息为第二指示信息,则上传所述第一文件。

可选地,所述文件上传指令中还包括对所述第一文件的加密处理指示;

所述客户端根据待上传的所述第一文件,计算得到第一数字指纹,包括:

所述客户端根据所述加密处理指示,计算所述第一文件的数字指纹;

所述客户端根据所述第一文件的数字指纹,对所述第一文件进行加密,得到第一加密文件;

所述客户端计算所述第一加密文件的数字指纹,得到所述第一数字指纹。

可选地,所述方法还包括:

所述客户端接收用户的文件下载指令,并根据所述文件下载指令,确定出待下载的第二文件;

所述客户端根据所述客户端中文件与文件的第一数字指纹的对应关系,确定出所述第二文件的第一数字指纹;

所述客户端根据所述第二文件的第一数字指纹,向所述服务器发送文件下载请求。

基于同样的发明构思,本发明提供的一种服务器,所述服务器包括:

收发模块,所述收发模块用于接收客户端发送的用于上传第一文件的文件上传请求;所述文件上传请求是所述客户端接收到用户的文件上传指令后发送的,所述文件上传请求中包括所述客户端根据所述第一文件计算得到的第一数字指纹;

查询模块,所述查询模块用于根据所述第一数字指纹,计算得到所述第一文件的第二数字指纹,并根据所述第一文件的第二数字指纹,查询区块链数据库;

处理模块,所述处理模块用于若确定所述区块链数据库中存储有所述第一文件的第二数字指纹,则记录所述用户对所述第一文件的所有权,并通过所述收发模块向所述客户端发送第一指示信息;所述第一指示信息用于指示所述客户端不再上传所述第一文件;所述区块链数据库中存储有多个服务器中所存储的文件的第二数字指纹,所述第一服务器为所述多个服务器中的任一服务器。

可选地,所述处理模块还用于:

若确定所述区块链数据库中未存储有所述第一文件的第二数字指纹,则通过所述收发模块向所述客户端发送第二指示信息,并将所述第一文件的第二数字指纹写入所述区块链数据库;第二指示信息用于指示所述客户端上传所述第一文件。

可选地,所述文件上传请求中还包括对所述第一文件的加密处理指示;

所述处理模块还用于:

记录所述用户对第一加密文件的所有权,并向所述客户端发送第一指示信息;所述第一加密文件为所述客户端根据所述加密处理指示对所述第一文件进行加密得到的,所述第一指示信息用于指示所述客户端不再上传所述第一加密文件。

可选地,所述收发模块还用于:

接收所述客户端发送的用于下载第二文件的文件下载请求;所述文件下载请求中包括所述第二文件的第一数字指纹;

所述处理模块还用于:

根据所述第二文件的第一数字指纹,计算所述第二文件的第二数字指纹,并根据所述第二文件的第二数字指纹,以及文件的第二数字指纹和服务器的标识的对应关系,若确定与所述第二文件的第二数字指纹对应的服务器的标识为所述第一服务器的标识,则通过所述收发模块将自身存储的所述第二文件并发送给所述客户端;若确定与所述第二文件的第二数字指纹对应的服务器的标识为第二服务器的标识,则通过所述收发模块指示所述第二服务器将所述第二文件发送给所述客户端,所述第二服务器为所述多个服务器中的另一服务器。

可选地,所述处理模块还用于:

根据私钥计算对随机信息的第一数字签名;

所述收发模块还用于:

向所述第二服务器发送重定向请求,所述重定向请求中包括所述第一数字签名、所述随机信息和公钥;所述重定向请求用于所述第二服务器根据所述第一数字签名、随机数和公钥验证所述第一数字签名合法后,将所述第二文件发送给所述客户端。

本发明提供的一种客户端,所述客户端包括:

收发模块,所述收发模块用于接收用户的文件上传指令;

处理模块,所述处理模块用于根据所述文件上传指令,确定出待上传的第一文件;以及,根据所述第一文件,计算得到第一数字指纹;

所述收发模块还用于根据所述第一数字指纹,向服务器发送文件上传请求;所述文件上传请求中包括所述第一数字指纹;以及,接收所述服务器发送的指示信息;

所述处理模块还用于,若确定所述指示信息为第一指示信息,则确定不上传所述第一文件;若确定所述指示信息为第二指示信息,则通过所述收发模块上传所述第一文件。

可选地,所述文件上传指令中还包括对所述第一文件的加密处理指示;

所述处理模块还用于:

根据所述加密处理指示,计算所述第一文件的数字指纹;

根据所述第一文件的数字指纹,对所述第一文件进行加密,得到第一加密文件;

计算所述第一加密文件的数字指纹,得到所述第一数字指纹。

可选地,所述收发模块还用于:

接收用户的文件下载指令;

所述处理模块还用于:

根据所述文件下载指令,确定待下载的第二文件;

根据所述客户端中文件与文件的第一数字指纹的对应关系,确定出所述第二文件的第一数字指纹;

所述收发模块还用于:

根据所述第二文件的第一数字指纹,向所述服务器发送文件下载请求。本发明实施例中,第一服务器接收客户端发送的文件上传请求,根据所述文件上传请求中的第一数字指纹,计算第一文件的第二数字指纹,并根据该第二数字指纹,查询区块链数据库,若确定区块链数据库中存储有第一文件的第二数字指纹,则直接记录用户对第一文件的所有权,向客户端发送第一指示信息,以指示客户端不再上传第一文件。由于所述区块链数据库中可存储有多个服务器中所存储的文件的第二数字指纹,因而,通过查询该区块链数据库,第一服务器可确定多个服务器中是否有服务器存储有该第一文件,若存有该第一文件,则无需用户再次上传该第一文件,从而,可实现了多个服务器中不会存储重复的文件,有效避免了现有技术中对云存储的服务器中存储的数据进行去重处理所引起的计算量很大的问题,同时,也节省了用户的上传带宽和上传时间。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中云存储联盟的系统架构图;

图2为本发明实施例中第一云存储的系统架构的示意图;

图3为本发明实施例提供的一种云端存储数据的方法中的文件上传过程所对应的流程示意图;

图4为本发明实施例提供的一种云端存储数据的方法中的文件下载过程所对应的流程示意图;

图5为本发明实施例中的一种云存储的服务器的结构示意图;

图6为本发明实施例中的一种云存储的客户端的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例,仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

下面结合说明书附图对本发明实施例做进一步详细描述。

本发明实施例中的云端存储数据的方法,具体适用于云存储联盟。图1为本发明实施例中云存储联盟的系统架构图,如图1所示,该云存储联盟100中包括多个云存储(如图1中的第一云存储1011、第二云存储1012…第n云存储101n),所述多个云存储共同维护的一个区块链数据库102,以及所述多个云存储中的每个云存储各自的用户(如图1中的1031、1032…103n)。

其中,该云存储联盟中任一云存储均可向其用户提供文件的上传和下载的服务,而且,该云存储联盟中的各个云存储可以为相同的或者不同的云存储厂商开发的云存储产品,任一云存储也可向其他云存储提供存储托管服务,本发明对此不做具体限制。

本发明实施例中,所述区块链数据库又名blockchain,云存储联盟中的任一云存储均可向该区块链数据库中写入数据,具体的,该区块链数据库用于存储云存储联盟中各个云存储中所存有的文件的第二数字指纹,以及真正持有每个文件的云存储的身份标识、云存储对文件的数字签名等信息。

需要说明的是,本发明实施例中区块链数据库中存储的文件的第二数字指纹,具体是指云存储根据文件的第一数字指纹计算得到的文件的第二数字指纹,由于某一文件的数字指纹具有唯一性,因此,文件的数字指纹以及文件的第二数字指纹均可作为文件的标识。

由于存储在区块链数据库中的数据可以快速同步且不可篡改,因此,使用区块链数据库不仅可以实现将云存储联盟中的各个云存储共享存储资源,节省云存储的存储和管理开销,而且还能保证用户在云存储联盟所存储的文件的安全性。

具体的,云存储联盟中的每个云存储均使用客户端-服务器(client-server)的系统架构。以云存储联盟中的任一云存储,即第一云存储为例,图2为本发明实施例中第一云存储的系统架构,如图2所示,所述第一云存储包括服务器201和客户端202,所述服务器中存储有用户上传的文件,此外,用户203可向客户端202发送文件上传指令或文件下载指令的方式,向服务器201中上传文件或者下载在该第一云存储中已上传的文件。

基于上面所描述的系统架构,下面将以第一云存储为例,介绍本发明实施例中的云端存储数据的方法。图3为本发明实施例提供的一种云端存储数据的方法中的文件上传过程所对应的流程示意图,如图3所示,所述文件上传过程包括以下步骤s301至步骤s305:

步骤s301:客户端接收用户的文件上传指令,并根据所述文件上传指令,确定出待上传的第一文件;

步骤s302:所述客户端根据所述第一文件,计算得到第一数字指纹;

步骤s303:所述客户端根据所述第一数字指纹,向服务器发送文件上传请求;所述文件上传请求中包括所述第一数字指纹;

步骤s304:第一服务器接收客户端发送的用于上传第一文件的文件上传请求;

步骤s305:所述第一服务器根据所述第一数字指纹,计算得到所述第一文件的第二数字指纹,并根据所述第一文件的第二数字指纹,查询区块链数据库;

步骤s306:所述第一服务器若确定所述区块链数据库中存储有所述第一文件的第二数字指纹,则记录所述用户对所述第一文件的所有权,并向所述客户端发送第一指示信息;

步骤s307:所述服务器若确定所述区块链数据库中未存储有所述第一文件的第二数字指纹,则向所述客户端发送第二指示信息,并将所述第一文件的第二数字指纹写入所述区块链数据库;

步骤s308:所述客户端接收所述服务器发送的指示信息,若确定所述指示信息为第一指示信息,则不上传所述第一文件;若确定所述指示信息为第二指示信息,则上传所述第一文件。

需要说明的是,在上述步骤s301至步骤s308中,客户端具体是第一云存储的客户端,第一服务器指第一云存储的服务器,相应地,用户具体是所述第一云存储的用户。

由于所述区块链数据库是由云存储联盟中的多个云存储共同维护的,因而,该区块链数据库中存储有多个云存储中所存储的文件的第二数字指纹,因而,通过查询该区块链数据库,第一服务器可确定云存储联盟中是否云存储的服务器中存储有该第一文件,若存有该第一文件,则无需用户再次上传该第一文件,从而,可实现了多个云存储中不会存储重复的文件,有效避免了现有技术中对云存储的服务器中存储的数据进行去重处理所引起的计算量很大的问题,同时,也节省了用户的上传带宽和上传时间。

具体的,在步骤s301中,客户端接收用户的用于上传第一文件的文件上传指令。比如说,在具体的应用场景中,用户可在客户端的图形交互界面中点击上传按钮,并在本地磁盘中选择待上传的第一文件,并点击上传按钮后触发的。

在步骤s302和步骤s303中,客户端根据用户选定的待上传的第一文件,经过分析和计算,得到第一数字指纹,并根据该第一数字指纹,向第一服务器发送文件上传请求。其中,该第一数字指纹可以是客户端通过计算该第一文件的文件哈希值得到的,或者也可以通过crc(cyclicalredundancycheck,循环冗余校验)、sha256(securehashalgorithm,安全散列算法)等其他计算方式得到的,此处不做具体限制。

本发明实施例中,某一文件的数字指纹具有唯一性,以数字指纹为文件哈希值为例,不同的文件计算得出的文件哈希值是不同的,因此,数字指纹可以唯一地标识每个文件。

在步骤s304,第一服务器接收客户端发送的用于上传第一文件的文件上传请求,并根据该文件上传请求中的第一数字指纹,进行进一步地计算处理,得到第一文件的第二数字指纹。

具体的,所述第一服务器可通过计算该第一数字指纹的数字指纹,得到该第一文件的第二数字指纹,(比如说,第二数字指纹可以为第一文件的数字指纹的哈希值),或者,也可以通过其他方式计算得到第一文件的第二数字指纹,此处不做具体限制。

需要说明的是,由于文件的数字指纹具有唯一性,因此,通过对第一数字指纹再次计算数字指纹,而得到的第一文件的第二数字指纹也具有唯一性,可作为文件的标识唯一地标识云存储中的每个文件。

在步骤s305中,第一服务器访问区块链数据库,以检测该区块链数据库中是否存储有该第一文件的第二数字指纹。其中,该区块链数据库中存储中多个服务器中所存储文件的第二数字指纹,在本发明实施例中,区块链数据库中实际存储有云存储联盟中的所有云存储中存储的文件的第二数字指纹。

在步骤s306中,若检测到区块链数据库中已存储有该第一文件的第二数字指纹,则说明云存储联盟的多个云存储中存在某一云存储的服务器中存储有该第一文件,具体的,可能是第一服务器存储有该第一文件,也可能是第一云存储以外的另一云存储(如第二云存储)的服务器中存储有该第一文件。由于该云存储联盟中已通过区块链数据库实现了存储资源的共享,因此,无论具体是哪个云存储的服务器实际存储有该第一文件,都无需用户再次上传该第一文件,第一服务器只需记录该用户对第一文件的所有权,并向客户端发送第一指示信息,以指示客户端不用再上传该第一文件。

举例来说,若用户通过客户端向第一服务器上传文件w,则客户端首先向第一服务器发送该文件w的第一数字指纹,即文件w的哈希值hash=h(w),由于区块链数据库中存储的是文件的二次哈希值doublehash=h(h(w)),因此,第一服务器在接收到文件w的第一数字指纹hash=h(w),会首先根据该第一数字指纹,计算文件w的第二数字指纹,即文件w的二次哈希值doublehash=h(h(w)),若计算得到的二次哈希值doublehash与区块链数据库中存储的二次哈希值相同,则认为云存储联盟中已存储有相同的文件,无需用户再次上传。

实际上,某些广受欢迎的文件(比如说电影、音乐等等)可能是很多用户共有的,在现有技术中,这类文件在多个云存储上重复的概率极高。因此,本发明实施例中,当云存储联盟中的任一云存储存储有某一文件的情况下,无需用户再次上传完整的该文件,只需记录下用户对该文件的所有权,因此,可以有效节省了用户的上传时间和带宽开销。

在具体的应用场景中,第一服务器可在本地的数据记录中记录其用户存储的各个文件的文件信息。其中,某一文件的文件信息可以为用户向第一云存储中上传该文件后,获得并记录在第一服务器的数据记录中的。

本发明实施例中,所述服务器中的数据记录可以是以数据库的方式记载的,比如说,各种关系型数据库(如mysql)或者非关系型数据库(如nosql),或者也可以是采用文件等其他方式记载,此处不做具体限制。

具体的,表1为本发明实施例中第一服务器中的数据记录中记载的文件信息的示例,如表1所示,对于任一文件来说,这些文件信息包括文件标识、持有该文件的云存储的身份标识、拥有该文件的所有权的用户列表。其中,文件标识可以为文件的数字指纹或根据文件的数字指纹计算得到的文件的第二数字指纹,拥有该文件的云存储可以是云存储联盟中的任一云存储的身份标识,拥有该文件的所有权的用户列表中包括用户该文件的所有权的各个用户的标识,该用户的标识具体可以是用户的id,且,拥有该文件的所有权的用户可以为一个或多个。

表1第一云存储的服务器中数据记录中记载的文件信息的示例

这种情况下,第一服务器检测到区块链数据库中存储有该第一文件的第二数字指纹,则记录该用户对该第一文件的所有权,具体的,可在该文件的第二数字指纹对应的用户列表中添加该用户的标识。

在步骤s307中,若检测到区块链数据库中未存储有该第一文件的第二数字指纹,则说明云存储联盟中的多个云存储中均未存储该第一文件,因此,需要用户上传该第一文件,即第一服务器向客户端发送第二指示信息,以指示客户端上传第一文件,并在客户端成功上传该第一文件后,将第一文件的第二数字指纹、第一云存储的身份标识写入到区块链数据库中。与此同时,第一服务器还将成功上传的第一文件的数字指纹或根据第一文件的数字指纹计算得到的第一文件的第二数字指纹、第一服务器的身份标识,以及该用户对第一文件的所有权(即在该文件的用户列表中添加该用户)记录在上述格式的第一服务器的数据记录中,以便于另一用户请求下在该第一文件时,第一服务器可进行相应地查询。

在这种情况下,第一云存储即为真正持有该第一文件的云存储,第一云存储对第一文件第二数字指纹的数字签名,用于向该区块链数据库表示该第一云存储写入的数据是真实可靠的。

在文件上传的过程中,客户端向服务器发送的第一数字指纹一般都是该客户端通过分析用户选定的第一文件,计算(如计算该第一文件的哈希值)得到的,也就是说,当用户通过客户端上传文件时,用户是真实持有待上传的第一文件的。但在某些极端情况下,如果用户文件的数字指纹泄露,非法用户在不持有文件的情况下,也可获得文件的所有权。举例来说,如果用户a的云存储中存储有文件a,但是文件a的数字指纹被泄露到了互联网上,用户b通过互联网取得文件a的数字指纹后,可通过软件模拟客户端计算数字指纹的过程,并将该数字指纹发送给服务器。进而,服务器通过该数字指纹计算文件a的第二数字指纹,并查询区块链数据库。由于云存储中已存储有该文件a,因此,服务器在确定区块链数据库中存储有文件a的第二数字指纹后,会直接记录用户b对文件a的所有权,从而使得用户b采用不正当途径取得了用户a的文件a。

因此,为了加强云存储中所存储的文件的安全性,第一服务器还可对用户上传的第一文件进行加密处理。具体的,用户在通过客户端上传第一文件时,还可具体指定对该第一文件的处理方式,即是否对第一文件进行加密处理。

在步骤s301中,客户端接收到的用户发送的文件上传指令中除了选定的待上传的第一文件外,还包括对第一文件的加密处理指示。

若文件上传指令中不包括该加密处理指示,则说明用户确定不对第一文件进行加密处理,这种情况下,用户待上传的文件就是第一文件本身,因而,所述客户端可直接计算第一文件的数字指纹(如第一文件的文件哈希值),并将其作为第一数字指纹在文件上传请求中发送给服务器,随后,服务器可通过执行上述步骤s305至步骤s308,进行后续的处理,此处不再赘述。

若所述处理指示为加密处理指示,则说明用户确定对第一文件进行加密处理,该用户待上传的文件实际为加密后的第一文件,因而,客户端在文件上传请求中发送给服务器的第一数字指纹为对加密后的第一文件计算得到的数字指纹。

以文件的数字指纹作为文件的哈希值为例,该计算第一数字指纹的过程具体包括,客户端计算第一文件的数字指纹,根据得到的第一文件的数字指纹对第一文件加密,得到第一加密文件,随后,再次计算第一加密文件的数字指纹,并将得到的第一加密文件的数字指纹作为第一数字指纹,同上述加密处理指示一起,在文件上传请求中发送给服务器。

由于用户上传的相同的文件,进行加密处理后得到的加密文件也是相同的,所以,加密文件的数字指纹以及根据该数据指纹进一步计算的第二数字指纹也是相同的。因而,如果区块链数据库中存储有该第一加密文件的第二数字指纹,则说明云存储联盟中的多个云存储中已存在一个云存储的服务器存储有相同的第一加密文件,则第一服务器可直接记录用户对第一加密文件的所有权;否则,仍要通过客户端上传该第一加密文件。

可以看出,在用户指示客户端对待上传的第一文件进行加密处理的情况下,客户端在文件上传请求中发送给服务器的第一数字指纹,实际上是根据第一文件的数字指纹对第一文件进行加密后,得到的第一加密文件的数字指纹。也就是说,用户只有在真正持有第一文件的情况下,才可得到第一加密文件的数字指纹,取得第一文件的所有权;而非法用户在仅仅获得第一文件的数字指纹,而未持有第一文件的情况下,不可能得到加密后的第一加密文件,所以也不能得到第一加密文件的第一数字指纹,从而取得的第一文件的所有权,而且由于用户加密后的文件的数字指纹泄露的可能性微乎其微,因而,通过对待上传的第一文件进行加密处理,可有效保证了云存储中存储的文件的安全。

除此之外,在现有技术中,如果云存储遗失或者擅自修改了用户上传的文件,用户也无法及时发现和证明,这使得用户上传到云存储的文件的完整性无法得到保证,为用户的数据权益带来了一定的隐忧。

本发明实施例中,通过区块链数据库实现了云存储联盟中各个云存储的存储资源共享,云存储联盟中的每个云存储中存储的文件的第二数字指纹都存储在了区块链数据库中,由于区块链数据库自身可快速同步且不可篡改的特性,如果云存储篡改了用户上传的文件,那么根据云存储中的文件计算得到的该文件的第二数字指纹必定和区块链数据库中存储的该文件的第二数字指纹不同,用户可通过申请查看区块链数据库,获取该文件原始的第二数字指纹,就可证明云存储服务商篡改用户数据的行为,从而保证了用户数据的完整性和一致性。

由于本发明实施例中所述的区块链数据库具体是指联盟链,即只有加入该联盟的结构或个体才有权限在该区块链数据库中写入或读取数据,因此,本发明实施例中,用户可通过云存储联盟中其他云存储访问该区块链数据库,或者也可以通过专门授权的机构访问区块链数据库,此处不做具体限制。

需要说明的是,作为一种简便的做法,本发明实施例中,第一服务器在接收到客户端发送的第一文件的第一数字指纹后,也可以不对第一数字指纹计算文件的第二数字指纹,相应地,在这种情况下,第一服务器的本地数据记录中文件的标识即为文件的第一数字指纹,区块链数据库中存储的各云存储中所有文件的第一数字指纹,第一服务器直接根据文件的第一数字指纹查询区块链数据库,判断区块链数据库中是否存储有相同的第一数字指纹,以确定是否有云存储已存储有该文件,

图4为本发明实施例提供的一种云端存储数据的方法中的文件下载过程所对应的流程示意图,如图4所示,所述文件下载过程包括如下步骤s401至步骤s406:

步骤s401:所述客户端接收用户的文件下载指令,并根据所述文件下载指令,确定出待下载的第二文件;

步骤s402:所述客户端根据所述客户端中文件与文件的数字指纹的对应关系,确定出所述第二文件的第一数字指纹;

步骤s403:所述客户端根据所述第二文件的第一数字指纹,向所述服务器发送文件下载请求;

步骤s404:所述第一服务器接收所述客户端发送的用于下载第二文件的文件下载请求,所述文件下载请求中包括所述第二文件的第一数字指纹;

步骤s405:所述第一服务器根据所述第二文件的数字指纹,计算所述第二文件的第二数字指纹,并根据所述第二文件的第二数字指纹,文件的第二数字指纹和服务器的标识的对应关系,若确定与所述第二文件的第二数字指纹对应的服务器的标识为所述第一服务器的标识,则将自身存储的所述第二文件并发送给所述客户端;

步骤s406:若确定与所述第二文件的第一数字指纹对应的服务器的标识为第二服务器的标识,则指示所述第二服务器将所述第二文件发送给所述客户端,所述第二服务器为所述多个服务器中的另一服务器。

本发明实施例中,由于多个云存储通过区块链数据库实现了存储资源的共享,因此,用户通过第一云存储上传的文件实际上有可能存储在第一云存储中,也有可能存储在云存储联盟中除第一云存储以外的第二云存储中。当用户通过向第一云存储下载文件时,可通过区块链数据库快速地发现真正持有该文件的云存储,并通过真正持有该文件的云存储将文件发送给客户端,由于该过程对用户来说是透明的,采用真正持有该文件的云存储将文件发送给客户端,可以保证文件下载过程中的用户体验。

需要说明的是,在上述步骤s401至步骤s406中,所述多个服务器具体是指一个云存储联盟中多个云存储的服务器,具体的,所述第一服务器具体指第一云存储的服务器,所述第二服务器具体是指第二云存储的服务器,所述用户为所述第一云存储的用户。

所述客户端和所述第一服务器可通过执行上述s401至s406中的方法步骤为用户提供文件下载的服务,而且,只有用户通过在第一云存储中上传文件,取得文件的所有权后,才可通过第一云存储的服务器和客户端下载该文件。

具体的,在步骤s401中,客户端接收用户的文件下载指令,并根据所述文件下载指令,确定出待下载的第二文件;其中,所述第二文件为所述第一云存储中所述用户拥有所有权的任一文件。在具体的应用场景,所述用户可在客户端的用户界面中选定要下载的第二文件,并点击下载按钮的方式向客户端发送文件下载指令,或者也可以通过其他方式向客户端发送文件下载指令,此处不做限制。

在步骤s402和步骤s403中,如果所述用户向第一云存储中上传了文件,则所述用户的客户端的数据记录存储有该用户向第一云存储中上传的各文件,以及各文件的第一数字指纹的对应关系。

因此,该客户端可通过查询客户端中的数据记录,获取待下载的第二文件的第一数字指纹,并根据该第二文件的第一数字指纹,向所述第一服务器发送文件下载请求。

在步骤s404中,第一服务器接收所述客户端发送的用于下载第二文件的文件下载请求,所述文件下载请求中包括所述第二文件的第一数字指纹。

在步骤s405中,第一服务器根据第二文件的第一数字指纹,计算该第二文件的第二数字指纹,比如说,可对该第二文件的第一数字指纹再次计算数字指纹,得到该第二文件的第二数字指纹;

进而,根据该第二文件的第二数字指纹,以及文件的第二数字指纹和服务器的标识的对应关系,确定出与第二文件的数字指纹对应的服务器的标识。

若确定与所述第二文件的第二数字指纹对应的服务器的标识为所述第一服务器的标识,即第二文件存储在第一云存储中,则第一服务器将自身存储的所述第二文件并发送给所述客户端。

本发明实施例中,所述第二数字指纹和服务器的标识的对应关系具体可以指所述服务器中存储的数据记录,如上文中的表1所示,该数据记录中包括用户向该第一云存储上传的各文件的文件信息,包括文件标识、持有文件的云存储的身份标识、对文件拥有所有权的用户列表,文件的第二数字指纹具体是指数据记录中文件的标识,服务器的标识具体是指真正存储该文件的云存储的身份标识。

其中,某一文件的文件信息是用户通过上述s301至s308中的方法步骤,在向第一云存储中上传该文件的过程中获得并记录在第一服务器中的,具体不再赘述。

因而,第一服务器可根据第二文件的第二数字指纹,查询第一服务器的数据记录,以确定出存储该第二文件的云存储的身份标识。若确定存储该第二文件的云存储即为该第一云存储自身,则第一云存储可直接为用户提供下载该第二文件的服务,将该第二文件发送给客户端。

反之,在步骤s406中,第一服务器若确定与所述第二文件的第二数字指纹对应的服务器的标识为第二服务器的标识,即第二文件存储在第二云存储中,则第一服务器指示所述第二服务器将所述第二文件发送给所述客户端,所述第二服务器为所述多个服务器中的另一服务器,即云存储联盟中除第一云存储以外的另一云存储。

即,第一服务器若确定持有该第二文件的云存储为云存储联盟中的第二云存储,则通过第二服务器为该用户提供文件下载的服务,将该第二文件发送给客户端。

具体包括,第一云存储通过如下方式计算辅助取回第二文件的服务证据:

evidence=sign(priv,r)公式一

其中,evidence为辅助取回该第二文件的服务证据,sign(priv,r)为数字签名函数,它有两个参数,分别是priv和r,具体的,priv是指第一云存储的私钥(即签名者的私钥),r是指随机信息,即待签名的消息,它是一个每次变动的数值,可以是单独的随机数或时间戳,或者,为了方便第二服务器识别待下载的第二文件,该随机信息还可是第二文件的第二数字指纹与随机数或时间戳的组合,其中,第二文件的第二数字指纹可以与随机数或时间戳直接拼接起来,或者也可以采用其他方式封装在随机信息中,此处不做限制。因此,该数字签名函数返回的结果即为第一云存储用自身的私钥对随机信息r的第一数字签名。

进而,在第一云存储计算得出该第一数字签名后,可向第二云存储发送重定向请求,即将用户下载文件的请求重定向链接到存储有该第二文件的云存储。其中,该重定向请求中包括计算得到的第一数字签名(即服务证据evidence)、上述随机信息r,以及第一云存储的公钥pub。

第二云存储在接收到该重定向请求后,将提取该重定向请求中的服务证据并保存,根据该服务证据以及随机信息r和第一云存储的公钥,通过如下方式验证其中第一数字签名的合法性:

f=verify(pub,r,evidence)公式二

其中,f为数据签名验证函数的返回结果,其可为一数值量或逻辑量;verify(pub,r,evidence)为数字签名验证函数,该函数具有3个参数,分别为pub、r、evidence;具体的,pub是指第一云存储的公钥(即签名者的公钥),r同公式一中相同,是指随机信息,即签名者签名的消息,evidence为第一云存储对随机信息r的数字签名,即第一数字签名;若该数字签名验证函数返回的结果为真(即f的值不为0),则证明该第一数字签名确实是第一云存储所签,验证通过,否则,若数字验证验证函数返回的结果为假(f的值为0),则证明该第一数字签名不是第一云存储所签,验证不通过。

若第二云存储验证第一数字签名合法,则第二云存储进一步通过获取随机信息r中的第二文件的数字指纹,确定出待下载的第二文件,进而,可为所述用户提供下载所述第二文件的服务,将第二文件发送给客户端。

此外,若第二云存储根据第一数字签名,确定出第一数字签名曾经出现过,则说明第一云存储采用该第一数字签名多次向第二云存储请求下载该文件,在这种情况下,第二云存储可拒绝该下载请求。

需要说明的是,本发明实施例中,由于用户通过客户端下载的文件一定是用户之前通过该客户端向第一服务器上传的,因此,若用户通过客户端下载的第二文件为加密文件,客户端中存储的该文件的数字指纹即为下载的第二文件进行解密的密钥,在第一服务器或第二服务器将所述第二文件发送给客户端后,客户端可根据其存储的该文件的数字指纹对下载的第二文件进行解密。

可见,在上述文件的下载的过程中,若用户通过第一云存储下载的第二文件存储在第二云存储上,第一云存储重定向链接到第二云存储的过程中还产生了服务证据(即第一云存储对随机信息r的数字签名),如果第一云存储和第二云存储之间订立有其他合约,比如存储托管服务等,第二云存储可在日后凭借该服务证据向第一云存储执行某些清算协议,比如说,索取一笔手续费等等,此处不做具体限制。

本发明实施例中,通过引入区块链数据库和数字签名技术,达成了云存储联盟,因而,可充分利用了多个云存储的存储空间,使得云存储联盟内的每个云存储不需要存储所有的文件,却呈现出持有云存储联盟内所有文件的效果,大大减小了云存储联盟内每个云存储的存储和管理开销,保护了用户数据的完整性,同时实现了多个云存储之间的数据共享、用户共享和收益共享。

基于同样的发明构思,本发明实施例还提供一种服务器,所述服务器为云存储中的服务器,所述服务器可参照上述方法,为用户提供在云存储中存储数据的服务。如图5所示,所述服务器500包括:

收发模块501,所述收发模块501用于接收客户端发送的用于上传第一文件的文件上传请求;所述文件上传请求是所述客户端接收到用户的文件上传指令后发送的,所述文件上传请求中包括所述客户端根据所述第一文件计算得到的第一数字指纹;

查询模块502,所述查询模块502用于根据所述第一数字指纹,计算得到所述第一文件的第二数字指纹,并根据所述第一文件的第二数字指纹,查询区块链数据库;

处理模块503,所述处理模块503用于若确定所述区块链数据库中存储有所述第一文件的第二数字指纹,则记录所述用户对所述第一文件的所有权,并通过所述收发模块501向所述客户端发送第一指示信息;所述第一指示信息用于指示所述客户端不再上传所述第一文件,所述区块链数据库中存储有多个服务器中所存储的文件的第二数字指纹,所述第一服务器为所述多个服务器中的任一服务器。

可选地,所述处理模块503还用于:

若确定所述区块链数据库中未存储有所述第一文件的第二数字指纹,则通过所述收发模块501向所述客户端发送第二指示信息,并将所述第一文件的第二数字指纹写入所述区块链数据库;第二指示信息用于指示所述客户端上传所述第一文件。

可选地,所述文件上传请求中还包括对所述第一文件的加密处理指示;

所述处理模块503还用于:

记录所述用户对第一加密文件的所有权,并向所述客户端发送第一指示信息;所述第一加密文件为所述客户端根据所述加密处理指示对所述第一文件进行加密得到的,所述第一指示信息用于指示所述客户端不再上传所述第一加密文件。

可选地,所述收发模块501还用于:

接收所述客户端发送的用于下载第二文件的文件下载请求;所述文件下载请求中包括所述第二文件的第一数字指纹;

所述处理模块503还用于:

根据所述第二文件的第一数字指纹,计算所述第二文件的第二数字指纹,并根据所述第二文件的第二数字指纹,以及文件的第二数字指纹和服务器的标识的对应关系,若确定与所述第二文件的第二数字指纹对应的服务器的标识为所述第一服务器的标识,则通过所述收发模块501将自身存储的所述第二文件并发送给所述客户端;若确定与所述第二文件的第二数字指纹对应的服务器的标识为第二服务器的标识,则通过所述收发模块501指示所述第二服务器将所述第二文件发送给所述客户端,所述第二服务器为所述多个服务器中的另一服务器。

可选地,所述处理模块503还用于:

根据私钥计算对随机信息的第一数字签名;

所述收发模块501还用于:

向所述第二服务器发送重定向请求,所述重定向请求中包括所述第一数字签名、所述随机信息和公钥;所述重定向请求用于所述第二服务器根据所述第一数字签名、所述随机信息和公钥验证所述第一数字签名合法后,将所述第二文件发送给所述客户端。

基于同样的发明构思,本发明实施例还提供一种客户端,所述客户端具体为云存储的客户端,所述客户端可参照上述方法,为用户提供向云存储中上传文件或者从云存储中下载文件的服务。如图6所示,所述客户端600包括:

收发模块601,所述收发模块601用于接收用户的文件上传指令;

处理模块602,所述处理模块602用于根据所述文件上传指令,确定出待上传的第一文件;以及,根据所述第一文件,计算得到第一数字指纹;

所述收发模块601还用于根据所述第一数字指纹,向服务器发送文件上传请求;所述文件上传请求中包括所述第一数字指纹;以及,接收所述服务器发送的指示信息;

所述处理模块602还用于,若确定所述指示信息为第一指示信息,则确定不上传所述第一文件;若确定所述指示信息为第二指示信息,则通过所述收发模块601上传所述第一文件。

可选地,所述文件上传指令中还包括对所述第一文件的加密处理指示;

所述处理模块602还用于:

根据所述加密处理指示,计算所述第一文件的数字指纹;

根据所述第一文件的数字指纹,对所述第一文件进行加密,得到第一加密文件;

计算所述第一加密文件的数字指纹,得到所述第一数字指纹。

可选地,所述处理模块602还用于:

接收用户的文件下载指令;

所述处理模块602还用于:

根据所述文件下载指令,确定待下载的第二文件;

根据所述客户端中文件与文件的数字指纹的对应关系,确定出所述第二文件的第一数字指纹;

所述收发模块601还用于:

根据所述第二文件的第一数字指纹,向所述服务器发送文件下载请求。

由上述内容可以看出:

本发明实施例中,第一服务器接收客户端发送的文件上传请求,根据所述文件上传请求中的第一数字指纹,计算第一文件的第二数字指纹,并根据该第二数字指纹,查询区块链数据库,若确定区块链数据库中存储有第一文件的第二数字指纹,则直接记录用户对第一文件的所有权,向客户端发送第一指示信息,以指示客户端不再上传第一文件。由于所述区块链数据库中可存储有多个服务器中所存储的文件的第二数字指纹,因而,通过查询该区块链数据库,第一服务器可确定多个服务器中是否有服务器存储有该第一文件,若存有该第一文件,则无需用户再次上传该第一文件,从而,可实现了多个服务器中不会存储重复的文件,有效避免了现有技术中对云存储的服务器中存储的数据进行去重处理所引起的计算量很大的问题,同时,也节省了用户的上传带宽和上传时间。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或两个以上其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或两个以上流程和/或方框图一个方框或两个以上方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或两个以上流程和/或方框图一个方框或两个以上方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或两个以上流程和/或方框图一个方框或两个以上方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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