示例#1
0
    def add_image(self, img_file, uuid, image_type):
        import os

        self.size = self.size + os.path.getsize(img_file)
        length = get_file_fingerprints(img_file)
        length_list = []
        length_list.append(str(image_type))
        count = len(length)
        point = 0
        if count > 4:
            count1 = count / 4
            for i in range(count):
                point += length[i][1]
                if i % count1 == 0:
                    length_list.append(i2b(point))
                    point = 0
                    continue
                if i == (count - 1):
                    length_list.append(i2b(point))
        else:
            for i in range(count):
                point += length[i][1]
            length_list.append(i2b(point))

        img_block_gen = io.read_chunks_from_file(img_file, length)
        img_data = ChunksImage.new(uuid)
        #img_data.fingerprints.append('|'.join(length_list))
        img_data.fingerprints.append(length_list)
        img_data.fingerprints.append(
            self.add_chunks(img_block_gen))  #这个迭代器用的好像有问题
        self.store_image(img_data)

        return img_data
示例#2
0
TARGET = 'test.bin'

filesizeM = 10
Mb = 1024 * 1024

os.system("dd if=/dev/urandom of=%s bs=%d count=%d" % (TARGET, Mb, filesizeM))
random.seed(open(TARGET, 'rb').read(1024))

set_min_block_size(1024)
set_max_block_size(2048)
set_average_block_size(1024)

r = Rabin()

before = get_file_fingerprints(TARGET)
f = open(TARGET, 'rb+')
data = f.read(int(filesizeM / 2 * Mb))
r.update(data)
r.update(b'x')
data = f.read()
r.update(data)
after = r.fingerprints()

assert len(before) <= len(after)

diffcount = 0
for i in range(len(before)):
    try:
        bs, bl, bp = before[i]
        As, al, ap = after[i]
示例#3
0
    # print('(%s, %s, %s)' % (start, length, fingerprint))
    reached.append((start, length, fingerprint))

r = Rabin()
r.register(block_reached)

with open(TARGET, 'rb') as f:
    while True:
        size = random.randint(1,os.path.getsize(TARGET))
        data = f.read(size)
        if len(data) == 0:
            break
        r.update(data)

partial = r.fingerprints()
gold = get_file_fingerprints(TARGET)

assert len(gold) == len(partial) == len(reached)

for i in range(len(gold)):
    try:
        gs,gl,gp = gold[i]
        ps,pl,pp = partial[i]
        rs,rl,rp = reached[i]
        assert gs == ps == rs
        assert gl == pl == rl
        assert gp == pp == rp
    except:
        print('gold   ', gold[i])
        print('partial', partial[i])
        print('reached', reached[i])
示例#4
0
TARGET = 'test.bin'

filesizeM = 10
Mb = 1024*1024

os.system("dd if=/dev/urandom of=%s bs=%d count=%d" % (
    TARGET, Mb, filesizeM))
random.seed(open(TARGET, 'r').read(1024))

set_min_block_size(1024)
set_max_block_size(2048)
set_average_block_size(1024)

r = Rabin()

before = get_file_fingerprints(TARGET)
f = open(TARGET, 'r+')
data = f.read(filesizeM/2 * Mb)
r.update(data)
r.update('x')
data = f.read()
r.update(data)
after = r.fingerprints()

assert len(before) <= len(after) 

diffcount = 0
for i in range(len(before)):
    try:
        bs,bl,bp = before[i]
        As,al,ap = after[i]
示例#5
0
    reached.append((start, length, fingerprint))


r = Rabin()
r.register(block_reached)

with open(TARGET, 'rb') as f:
    while True:
        size = random.randint(1, os.path.getsize(TARGET))
        data = f.read(size)
        if len(data) == 0:
            break
        r.update(data)

partial = r.fingerprints()
gold = get_file_fingerprints(TARGET)

assert len(gold) == len(partial) == len(reached)

for i in range(len(gold)):
    try:
        gs, gl, gp = gold[i]
        ps, pl, pp = partial[i]
        rs, rl, rp = reached[i]
        assert gs == ps == rs
        assert gl == pl == rl
        assert gp == pp == rp
    except:
        print('gold   ', gold[i])
        print('partial', partial[i])
        print('reached', reached[i])