Я попробовал все несколько методов, чтобы исправить ошибку заполнения, однако я все еще не могу получить входные данные, имеющие длину (кратную 16).
Я пытался использовать ljust (), rjust () и [: 32].
import base64
from Crypto.Cipher import AES
class dataset_comparison():
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["DS300"]
dataset1_col = mydb["user_set_1"]
dataset2_col = mydb["user_set_2"]
dataset1 = pd.read_csv("user_set_1.csv", encoding = 'ISO-8859-1')
dataset2 = pd.read_csv("user_set_2.csv", encoding = 'ISO-8859-1')
dataset1_json = json.loads(dataset1.to_json(orient='records'))
dataset2_json = json.loads(dataset2.to_json(orient='records'))
dataset1_col.remove()
dataset1_col.insert(dataset1_json)
dataset2_col.remove()
dataset2_col.insert(dataset2_json)
query = {}
#dataset1Results = dataset1_col.find({"first_name":"Ira"})
def encrypt_dataset(dataset):
dataset_encrpted = []
for row in dataset:
key = ""
for key_parts in row:
if(key_parts!="_id"):
key += str(row[key_parts])
temp_row = {}
key+= "_______________________________________________"
for value in row:
cipher = AES.new(key.ljust(24)[:24],AES.MODE_ECB)
tvalue = row[value] + "____________________________________________"
encoded = base64.b64encode(cipher.encrypt(tvalue.rjust(32)[:32]))
row[value] = encoded
dataset_encrpted.append(row)
return dataset_encrpted
dataset_1_encrypted = encrypt_dataset(dataset1_col.find({}, {'_id': False}))
#decrypt and compare, output equivalent rows
def decrypt_dataset(dataset, dataset2):
dataset_decrpted = []
#get list of keys:
keys =[]
for row in dataset2:
key = ""
for key_parts in row:
if(key_parts!="_id"):
key += str(row[key_parts])
temp_row = {}
#Added this as padding
key+= "_______________________________________________"
keys.append(key)
print(keys)
for key in keys:
#decrypt using key
for row in dataset2:
for value in row:
cipher = AES.new(key.ljust(24)[:24],AES.MODE_ECB)
tvalue = value + "____________________________________________"
row[value] += "______________________________________"
decoded = cipher.decrypt(base64.b64decode(row[value].rjust(32)[:32]))
row[value] = decoded
dataset_decrpted.append(row)
print(dataset_decrpted)
decrypt_dataset(dataset_1_encrypted, list(dataset2_col.find({}, {'_id': False})))
Эта программа должна взять строку в базе данных, зашифровать ее, используя сумму всех элементов в этой базе данных. Затем его можно «отправить» другому человеку, который хочет найти сходства между наборами данных, не имея возможности увидеть весь набор данных. Они перебирают и дешифруют набор данных с помощью каждого из своих собственных ключей и ищут после каждого цикла, находится ли этот ключ (соответствующий строке в их наборе данных) в базе данных. Мне еще предстоит выполнить сравнение, так как я все еще работаю над шифрованием / дешифрованием.