我正在尝试一种密码学算法。该过程应该很简单:
它保护消息msg = b'Sample'
通过传递IPI点,我们可以说:ipi = np.array([1,2,3,4,5])
成功。它会生成一个保管库(N,2)形的np.int64矩阵,表示x和y坐标集。
但是,在解码消息时会出现问题。因此,为了恢复邮件,我要做的就是。
对应的y-每个和x坐标的坐标查找。这将返回一组表示为np.64矩阵的(x,y)。
通过使用在步骤1中生成的点,我尝试通过计算拉格朗日插值多项式系数来对多项式系数进行解码,以恢复多项式系数。
最后,现在我获得了多项式系数,我再次通过RScodec对其进行了解码,以期取回已解码的消息。但是我反而空了。一个简单的rs.decode()
因此,我的代码段中的一个简短代码段是:
解码
def get_points(ipi, vault):
ixs = np.in1d(vault[:,0], ipi)
points = vault[ixs]
return points
def decode_coefficients(points):
xs = points[:,0]
ys = points[:,1]
coeffs = poly_to_coeffs(lagrange(xs,ys))
# return as bytearray:
return bytearray(coeffs.astype(int).tolist())
对于编码,它非常简单:
def encode(msg, ipi):
coefficients = rs.encode(msg)
vault = projection(coefficients, ipi)
return vault
def projection(coeffs, ipi):
y = np.polyval(coefffs,ipi).astype(np.int64) % modulus
return np.stack([ipi,y], axis=1)
这是我测试的一些日志。
msg = b'Sample'
ipi = np.array([1,2,3,4,5])
Generate fuzzy vault: bytearray(b'Sample')
[[ 10 100]
[ 57 70]
[ 66 83]
[ 65 160]
[ 21 34]
[ 5 100]
[ 24 145]
[ 53 16]
[ 4 2]
[ 36 2]
[ 9 59]
[ 38 183]
[ 2 154]
[ 67 167]
[ 3 108]
[ 62 58]
[ 74 7]
[ 18 31]
[ 1 84]
[ 6 186]
[ 11 111]
[ 46 166]
[ 32 127]]
Process finished in: 0.04680013656616211
-------------------------Unlocking vault
Unlocked fuzzy vault:
bytearray(b'')
我只是为了学习而编码。我在做什么错了?
到目前为止我尝试过的事情:
import reedsolo as rs
erase_pos
答案 0 :(得分:0)
看着它,我想我以前看过类似的东西,但是它使用的是Galois字段,但是您是否不需要首先获取检索点的子集?在将其扔到decode_coeff
函数之前?