分片哈希piecewise hashing

1.基本概念

分片哈希是使用任意的哈希算法对一个文件产生多个校验和而不是对一个文件产生一个校验和。

它将一个文件进行切片,将文件分成固定的大小,然后计算每一个切片的哈希值。例如,第一个hash是由前512个字节构成的,第二个哈希值是由后面的另外的512个字节构成的。

这个技术最先被用到在图像的取证上的。如果一个错误发生了,只有一个分段hash会受到影响,对于剩下的数据仍然能保持其正确性。

分段hash可以使用加密哈希例如MD5或者传统的FNV哈希算法。

=========================================================

对于分段hash,我们要做的事情首先就是删除文本中的无用字符,对文本每个片段进行切片,计算它们的hash值。


2.删除文本中不需要的字符

解决方案
strip() 方法能用于删除开始和结尾的字符。
现在我们要从文件中读取多行数据。我们可以使用strip操作和其他迭代操作相结合。

代码如下:

In [7]: wholeline=""

In [8]: with open(filename) as f:
   ...:     lines = (line.strip() for line in f)
   ...:     for line in lines:
   ...:         wholeline +=line
   ...:     print wholeline
   ...:     
In [10]: wholeline.replace(' ','')

分片哈希piecewise hashing_第1张图片
说明:
我们的filename中存放的是我们的代码文件

部分代码如下所示:

分片哈希piecewise hashing_第2张图片

我们首先设置一个空的字符串,这个时候我们使用生成器和strip相结合,删除开头和结尾的空白字符串。这个时候我们将去除了开头和结尾的代码串依次赋值给一个空白字符串然后将其串联成一个大的字符串。

我们可以打印出wholeline看一下结果如下所示:

分片哈希piecewise hashing_第3张图片

这个时候由于中间的代码的空格还没有去除,这个时候我们需要使用replace这个函数去除掉我们代码中间的空格。

3.python中生成MD5

我们在得到整个文件或者代码文件的后我们需要对整个文件进行切片,然后计算出每个文件切片之后的hash值。计算每个文件切片的hash值的时候我们可以使用传统的hash算法,例如mds sha256等等。
在这里我们使用md5来计算我们文件的切片。
在Python中生成md5一般有两种方法。


3.1使用md5包

分片哈希piecewise hashing_第4张图片


3.2 使用hashlib

分片哈希piecewise hashing_第5张图片

一般都使用第二种方法。

同理我们可以使用hashlib来计算其他的传统加密hash例如:sha1,sha256等等

如下所示:
分片哈希piecewise hashing_第6张图片


分片哈希piecewise hashing_第7张图片





Reference

[1].http://python3-cookbook.readthedocs.io/zh_CN/latest/c02/p11_strip_unwanted_characters.html



你不在
当我最需要爱
无尽的等待像独白的难捱
你不在
我受了伤
再偷偷好起来

你可能感兴趣的:(【代码克隆检测】)