一、 *实验目的*

(1) 掌握在Linux下安装和使用版权保护区块链系统

(2) 掌握版权保护区块链系统主要功能模块

(3) 区块链的原理

二、 *实验内容*

(1) 分析并调试版权保护区块链系统程序主要功能模块

(2) 选取测试实验数据(txt文本、mp3音频、jpg图像)

(3) 运行Linux下的版权保护区块链系统

(4) 用版权保护区块链系统对实验测试数据提取版权信息进行不重复的上链。

三、 *系统整体描述和分功能描述*

*系统整体描述*

BitRights系统实现了基于区块链的数字版权保护概念验证。用户上传媒体文件,并永久声明其作品的所有权。网络上的任何人都可以查看已发表的作品并验证作者的正确性。此外,系统会检测上传作品与已发表作品是否过于相似,并进行禁止。目前支持音频、图像和文本文件。

每当用户上传文件时,一个新的区块就会被添加到区块链中。该块包含作品的标题、作者、下载文件的路径/链接、文件的哈希值、作者的公钥、时间戳和前一个块的哈希值。其中使用文件的散列而不是原始数据来保持块大小较小。同时其中包含的公钥可以使作者知道相应的密钥,从而证明所有权。与任何区块链一样,前一个区块的哈希值允许用户验证该链是否未被篡改。

*分功能描述*

1)Blockchain上链

用来实现整个系统中所有交易数据的网络的概念。包含了一系列方法和属性,用于管理和操作区块链。该类可以包括创建新的区块、添加交易数据到区块链、验证区块的有效性、搜索特定的交易等功能。

2)verify_block(self, block)

这段代码通过迭代self.chain中的每个块来验证新块block的原创性。它首先检查新块和每个先前块的genre是否相同。然后,根据genre的类型执行相应的检查。

如果genre为Audio,则调用ac.calc_accuracy函数计算新块和先前块音频文件的相似度得分score。如果相似度得分大于0.9,表示新块的音频文件与先前块的音频文件相似度过高,返回0表示验证失败。

如果genre为Text,则调用tc.check_text_similarity函数检查新块和先前块文本文件的相似度得分score。如果相似度得分小于100,表示新块的文本文件与先前块的文本文件相似度过低,返回0表示验证失败。

如果genre为Image,则调用ic.calc_accuracy函数计算新块和先前块图像文件的相似度得分score。如果相似度得分小于0.4,表示新块的图像文件与先前块的图像文件相似度过低,返回0表示验证失败。

3)lookup(self, transaction)

这段代码通过迭代 self.chain 中的每个块来查找与给定交易数据 transaction 相关的先前块。它首先检查每个先前块的 genre 是否与给定交易的 genre 相同。然后,根据 genre 的类型执行相应的检查。

如果 genre 为 Audio,则调用 ac.calc_accuracy 函数计算给定交易的音频文件与先前块音频文件之间的相似度得分 score。如果相似度得分大于0.9,表示给定交易的音频文件与先前块的音频文件相似度过高,直接返回该先前块。

如果 genre 为 Text,则调用 tc.check_text_similarity 函数检查给定交易的文本文件与先前块文本文件之间的相似度得分 score。如果相似度得分小于100,表示给定交易的文本文件与先前块的文本文件相似度过低,直接返回该先前块。

如果 genre 为 Image,则调用 ic.calc_accuracy 函数计算给定交易的图像文件与先前块图像文件之间的相似度得分 score。如果相似度得分小于0.4,表示给定交易的图像文件与先前块的图像文件相似度过低,直接返回该先前块。

4)upload()

检查请求中是否包含名为 contentFile 的文件。如果没有该文件,返回一个带有错误信息的 JSON 响应。

接下来从请求中获取 contentFile 文件,并将其存储在变量 file 中。

根据请求中的 action 值进行不同的操作。如果 action 是 “lookup”,表示进行查找操作。它将上传的文件保存在临时文件夹中,并构建一个包含了文件的信息的字典 lookup_media。然后,调用 blockchain.lookup 方法来查找与该文件相关的先前块。如果找不到匹配的先前块,响应中的 unique 属性将为 True,表示该文件是唯一的。如果找到了匹配的先前块,响应中的 unique 属性将为 False,同时返回匹配的块信息和一条附加消息。

如果 action 是 “publish”,表示进行发布操作,即将文件添加到区块链中。

如果 action 不是 “lookup” 也不是 “publish”,则默认将文件保存到上传文件夹中。

最后,根据不同的响应结果,使用 jsonify 方法将响应转换为 JSON 格式,并返回 HTTP 状态码 200 表示成功。

四、 *实验步骤、结果及分析*

*实验步骤*

  1. 打开kali虚拟机

img

  1. 检查python版本号

img

  1. sh文件内容运行失败,选择手动运行

下载virtualenv

img

再次运行install.sh

下载还是失败,挂一下清华源

img

再次尝试,下载的很快

img

但python版本不对,和软件包不兼容。

改用Anaconda,放弃编译环境了。

安装Anaconda

img

安装完成

img

随后再环境中安装软件包。

img

4.安装差不多了,仍然有安不上的

先运行一下程序试试

imgimg

安装报错所需要的文件包

imgimg

对于较为麻烦的image-match选择直接从github下载源文件安装

img

5.程序运行成功

img

可以打开网页界面

img

但后续发现需要使用gpg生成密钥

img

6.再去安装gpg

升级apt

img

安装gog后生成密钥

img

设置密码12345678

img

证书生成完毕

img

输入密钥

img

上传成功

img

实验结果及分析

1.在实验过程基础上又上传了一个mp3文件

img

此时可以在uploads文件夹下看见上传的文件

img

通过view Blochain也可以看见上传的文件

img

2.此时在上传一张蒙娜丽莎

先通过lookup检测,可以看见没有相似文件

img

在进行上传

3.在尝试上传蒙娜丽莎2

img

检测会报错,说已有相似图片。说明功能成功

(显示有点问题)已有功能图片显示在这里

img

4.以上过程说明实验成功

证明了用版权保护区块链系统可以对实验测试数据实现提取版权信息进行不重复的上链。

五、 *实验中遇到的问题及改正的方法*

  1. 下载sh中文件会出错

img

可以手动运行一步步下载。

img

2.安装时报错

img

读代码知道要先按numpy 1.16.3,直接上清华源

pip install -U numpy==1.16.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

img

还是报错,选择用pycharm解决

安装pycharm

img

重新配置了一下环境,再安装软件包

img

  1. 配置环境需要python3.6的版本

需要重新安装python再配置环境

img

3.升级apt的时候报错

img

需要安装

apt install binutils