本发明涉及终端软件分发验证领域,特别是涉及一种基于区块链数据结构的终端软件分发验证方法。
背景技术:
终端设备上软件的部署和维护工作量大,时间长,成本高。而远程软件分发也面临着分发文件内容错误或软件更新时出错的问题。
技术实现要素:
本发明主要解决的技术问题是提供一种基于区块链数据结构的终端软件分发验证方法,能够完成对终端版本的分发验证,利用区块链数据结构存储版本信息,不易篡改,保证终端软件的升级的完整准确;利用版本文件哈希值易于验证软件分发结果。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种基于区块链数据结构的终端软件分发验证方法,包括:终端设备上设置软件分发客户端,服务器上设置软件版本数据库,版本文件存储库;版本链条上每个版本构成区块链的一个区块,区块中存在区块头和区块文件,其中区块头中包含了前一区块的区块头哈希值和本区块区块文件的完整哈希树,即本区块的区块文件需计算生成默克尔树;终端设备和服务器上均存储完整的软件版本链条;
版本分发步骤如下;
第一步,版本文件压缩成zip包,上传到服务器,设置版本号;服务器解zip包,将版本文件存储在版本文件存储库中,并生成版本文件的完整默克尔树路径,并放入软件版本数据库,与当前版本号对应;另外,软件版本数据库中还需计算前一版本的区块头哈希值并存储;
第二步,服务器通知软件分发客户端有新的版本;软件分发客户端连接软件版本数据库获取新版本的区块头数据,并获得前一版本的头哈希值,与当前版本链条中对比,如果当前版本链条中已存在此哈希值,则仅需下载此新版本即可,否则继续向前追溯,直到找到已存在的版本为止;
第三步,得到新版本的默克尔树,根据默克尔树中文件哈希值从版本文件存储库获取文件并校验,如果校验失败则文件重新下载,直到下载完全成功,更新本地版本链条,并根据文件路径进行文件更新,文件更新完成也需校验文件哈希值,校验失败则需重新进行更新操作;重复此步骤,直到已得到最新版本并更新完成。
进一步,第一步中上传的版本包文件打包时要按照实际更新的目录结构打包、上传;上传后的文件由服务器生成版本数据,并存储版本文件。
进一步,第二步中软件分发客户端从服务器下载版本链信息,已有版本区块校验,未下载版本区块则下载。
进一步,第三步中完成对更新版本的校验后,将区块文件更新到软件运行目录中。
本发明的有益效果是:本发明利用区块链构建版本链条,并利用区块链实现对软件分发结果的检查,本发明能准确的进行软件分发,避免软件分发中出现错误引起终端软件出现错误。
具体实施方式
下面对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
本发明实施例包括:
一种基于区块链数据结构的终端软件分发验证方法,包括:终端设备上设置软件分发客户端,服务器上设置软件版本数据库,版本文件存储库;版本链条上每个版本构成区块链的一个区块,区块中存在区块头和区块文件,其中区块头中包含了前一区块的区块头哈希值和本区块区块文件的完整哈希树,即本区块的区块文件需计算生成默克尔树;终端设备和服务器上均存储完整的软件版本链条;
版本分发步骤如下;
第一步,版本文件压缩成zip包,上传到服务器,设置版本号,上传的版本包文件打包时要按照实际更新的目录结构打包、上传;上传后的文件由服务器生成版本数据,并存储版本文件;服务器解zip包,将版本文件存储在版本文件存储库中,并生成版本文件的完整默克尔树路径,并放入软件版本数据库,与当前版本号对应;另外,软件版本数据库中还需计算前一版本的区块头哈希值并存储;
第二步,服务器通知软件分发客户端有新的版本;软件分发客户端连接软件版本数据库获取新版本的区块头数据,并获得前一版本的头哈希值,与当前版本链条中对比,如果当前版本链条中已存在此哈希值,则仅需下载此新版本即可,否则继续向前追溯,直到找到已存在的版本为止;
第三步,得到新版本的默克尔树,根据默克尔树中文件哈希值从版本文件存储库获取文件并校验,如果校验失败则文件重新下载,直到下载完全成功,更新本地版本链条,并根据文件路径进行文件更新,文件更新完成也需校验文件哈希值,校验失败则需重新进行更新操作;重复此步骤,直到已得到最新版本并更新完成。例如设备本机版本链条存储目录d:\atm\version_chain,其中根据区块头哈希值创建目录,目录中分别存储区块头数据和区块文件,区块文件需按照更新时的目录结构存储;完成对更新版本的校验后,将区块文件更新到软件运行目录中。
本发明利用区块链构建版本链条,并利用区块链实现对软件分发结果的检查,本发明能准确的进行软件分发,避免软件分发中出现错误引起终端软件出现错误。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。