tdoa_int = np.zeros((NUMBER, DIMIENSION), dtype=object) for i in range(NUMBER): tdoa_int[i] = float2Int(grid_tdoa[i]) # 初始化相关加密参数 注意这里的加密方式不是原生的VHE的加密,而是为了求欧式距离,特殊定义了一些加密方式 T = vhe.getRandomMatrix(DIMIENSION, 1, vhe.tBound) S = vhe.getSecretKey(T) I = np.eye(DIMIENSION, dtype=object) M_TDOA = vhe.KeySwitchMatrix(I, T) # M可以用来进行加密了 # 先定义一个numpy数组 来存储加密数据 enc_tdoa = np.zeros((NUMBER, DIMIENSION + 1), dtype=object) # print("开始对%dm网格的%d条tdoa数据进行加密" % (SQURE_SIZE, NUMBER)) t0 = time.time() for i in range(NUMBER): enc_tdoa[i] = vhe.encrypt_distance(M_TDOA, tdoa_int[i]) M_float = np.array(M_TDOA, dtype=float) M_I = np.linalg.pinv(M_float) I_star = vhe.getBitMatrix(I) A = I_star.dot(M_I) H = A.T.dot(A) H_int = np.zeros((H.shape[0], H.shape[1]), dtype=object) # print("H矩阵整数化,放大系数为:%d" % (H_large)) for i in range(H.shape[0]): for j in range(H.shape[1]): H_int[i][j] = int(H_large * H[i][j]) print("开始实时生成网格的ECEF坐标加密") grid_coor = grid_real[:, 1:4]
if type(coor_int[0][0]) == int: print("成功把浮点型的tdoa转换为python原生的int类型") print("初始化加密参数") # 初始化相关加密参数 注意这里的加密方式不是原生的VHE的加密,而是为了求欧式距离,特殊定义了一些加密方式 T = vhe.getRandomMatrix(DIMIENSION, 1, vhe.tBound) S = vhe.getSecretKey(T) I = np.eye(DIMIENSION, dtype=object) M = vhe.KeySwitchMatrix(I, T) # M可以用来进行加密了 # 先定义一个numpy数组 来存储加密数据 enc_coor = np.zeros((NUMBER, DIMIENSION + 1), dtype=object) print("开始对%dm网格的%d条coor数据进行加密" % (SQURE_SIZE, NUMBER)) t0 = time.time() for i in range(NUMBER): enc_coor[i] = vhe.encrypt_distance(M, coor_int[i]) if (i + 1) % 10000 == 0: print("已完成%d条数据的加密,当前进度为%.2f%%" % ((i + 1), ((i + 1) / NUMBER) * 100)) # t1 = time.time() print("完成加密,耗时%.2f秒" % (t1 - t0)) print("保存密文coor") np.save("EncCOOR_150m.npy", enc_coor) print("保存密钥S,M") np.save("EncCOOR_150m_S.npy", S) np.save("EncCOOR_150m_M.npy", M)
plane_toa = [0, 0, 0] # sensors_serial = [0,0,0] for i in range(len(j)): if SENSORS.__contains__(j[i][0]): if j[i][0] == 322: plane_toa[0] = j[i][1] if j[i][0] == 436: plane_toa[1] = j[i][1] if j[i][0] == 13: plane_toa[2] = j[i][1] plane_tdoa = calcTDOAByMessage(plane_toa) # 将浮点型的飞机tdoa转换为整型 plane_tdoa_int = float2Int(plane_tdoa) enc_plane_tdoa_int = vhe.encrypt_distance(EncTDOA_M, plane_tdoa_int) # 加密的飞机的tdoa和网格的tdoa逐条计算密文欧式距离求top5的index top_k_index = calcEncTopKInex(enc_plane_tdoa_int, EncTDOA, EncTDOA_H) # 根据索引 再Coor中寻找对应的坐标数据累加 encSumCoor = calcEncLocationEstimationSum(top_k_index, EncCOOR) # 对密文位置和解密 decSumCoor = vhe.decrypt(EncCOOR_S, encSumCoor) # 解密后再缩小放大倍数 再取均值 predictCoor = decSumCoor / (5 * S2NS) # 然后转换为llh坐标 predictLLH = ecef2llh(predictCoor) error_llh = geodesic((lat, lon), (predictLLH[0], predictLLH[1])).m print("预测的LLH位置和飞机的LLH位置的误差为%.2fm" % error_llh)
print("成功把浮点型的tdoa转换为python原生的int类型") print("初始化加密参数") # 初始化相关加密参数 注意这里的加密方式不是原生的VHE的加密,而是为了求欧式距离,特殊定义了一些加密方式 T = vhe.getRandomMatrix(DIMIENSION, 1, vhe.tBound) S = vhe.getSecretKey(T) I = np.eye(DIMIENSION, dtype=object) M = vhe.KeySwitchMatrix(I, T) # M可以用来进行加密了 # 先定义一个numpy数组 来存储加密数据 enc_tdoa = np.zeros((NUMBER, DIMIENSION + 1), dtype=object) print("开始对%dm网格的%d条tdoa数据进行加密" % (SQURE_SIZE, NUMBER)) t0 = time.time() for i in range(NUMBER): enc_tdoa[i] = vhe.encrypt_distance(M, tdoa_int[i]) if (i + 1) % 10000 == 0: print("已完成%d条数据的加密,当前进度为%.2f%%" % ((i + 1), ((i + 1) / NUMBER) * 100)) t1 = time.time() print("完成加密,耗时%.2f秒" % (t1 - t0)) print("保存密文tdoa") np.save("EncTDOA_150m.npy", enc_tdoa) print("开始基于加密参数生成H矩阵") M_float = np.array(M, dtype=float) M_I = np.linalg.pinv(M_float) I_star = vhe.getBitMatrix(I) A = I_star.dot(M_I)