Ошибка при вводе строк и заполнении с использованием Crypto.Cipher - PullRequest
0 голосов
/ 24 апреля 2019

Я попробовал все несколько методов, чтобы исправить ошибку заполнения, однако я все еще не могу получить входные данные, имеющие длину (кратную 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})))

Эта программа должна взять строку в базе данных, зашифровать ее, используя сумму всех элементов в этой базе данных. Затем его можно «отправить» другому человеку, который хочет найти сходства между наборами данных, не имея возможности увидеть весь набор данных. Они перебирают и дешифруют набор данных с помощью каждого из своих собственных ключей и ищут после каждого цикла, находится ли этот ключ (соответствующий строке в их наборе данных) в базе данных. Мне еще предстоит выполнить сравнение, так как я все еще работаю над шифрованием / дешифрованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...