源码地址:https://github.com/tahoe-lafs/zfec
安装zfec
python -m pip install zfec
示例
例如我们有k个数据块,我们希望生成m个数据块(m>=k),从而可以使用m个数据块中的任意k个恢复出原来的数据块。
这里,我们取k=2,m=3,原始数据是二进制字符串b'abcde'
。需要注意的是,为了保证原始数据能被k整除,该工具会对数据添加padding,padding为b'\x00'
。
编码时,会得到一个数组,每个元素是一个二进制字符串(数据块)。
解码时,需要输入k个数据块以及对应的下标,以及添加的padding的长度。
from zfec.easyfec import Encoder, Decoder
import random
if __name__ == "__main__":
k = 2
m = 3
# 1 correction blocks for every 2 blocks
enc = Encoder(k, m)
dec = Decoder(k, m)
# Dummy payload, byte data
data = b'abcde'
# calculate padding length
if len(data) % k != 0:
padlen = (len(data)//k) - len(data)%k
else: padlen = 0
# encode
byte_array = enc.encode(data)
print(byte_array) # [b'abc', b'de\x00', b'kl\xa5']
# decode, need pass in the blocks + blocknums and padlen
blocks = (byte_array[0],byte_array[2])
blocknums = (0,2)
decoded = dec.decode(blocks, sharenums=blocknums,padlen=padlen)
print(decoded) # b'abcde'