代码实现
用到的G_hash是国密算法SM3,
g_p是Miller_Rabin算法生成大素数算法
ModReverse是生成逆元算法
from random import randint
from algorithm.g_hash import G_hash
from algorithm.g_keypairs import g_p, ModReverse
"""
使用说明
只能加解密64位hash值
加密时,
G_si(S,n,k) 加密数据S,给n个人,至少k能解密
返回share[] 有n项
解密时
shamir_decrypt(Share) Share为share[]至少k个元素的数组
返回要加密的值
"""
# 输入要保护的数据,生成秘密共享数据n条,构建k元多项式
# 生成的素数为(2**64,2**65)就是16*16位二进制数 hash为 64*16
# 把hash分为4端16*16加密
# 返回的是si是s[1][i]+s[2][i]+s[3][i]+s[4][i]
# 解密是 用k-1个 i,s[1][i] (0<i<k)解出 hash[1]..
def G_si(S,n,k):
nimi_key=k
hash =[int(S[0:16], 16), int(S[16:32], 16), int(S[32:48], 16), int(S[48:64],