Шифрование данных статическое шифрование

#python #python-3.x #python-cryptography

Вопрос:

Мой шестигранник меняется день ото дня. Как я могу изменить его обратно на статический

Код

 from Crypto.Cipher import AES
import pandas as pd
import mysql.connector

myconn = mysql.connector.connect(host="######", user="##", password="######", database="#######")
query = """SELECT * from table """
df = pd.read_sql(query, myconn) #getting hexidigit back from the SQL server after dumping the ecrypted data into the database

def resize_length(string):
    #resizes the String to a size divisible by 16 (needed for this Cipher)
    return string.rjust((len(string) // 16   1) * 16)

def encrypt(url, cipher):
    # Converts the string to bytes and encodes them with your Cipher
    cipherstring = cipher.encrypt(resize_length(url).encode())
    cipherstring = "".join("{:02x}".format(c) for c in cipherstring)
    return cipherstring

def decrypt(text, cipher):
    # Converts the string to bytes and decodes them with your Cipher
    text = bytes.fromhex(text)
    original_url = cipher.decrypt(text).decode().lstrip()
    return original_url

# It is important to use 2 ciphers with the same information, else the system breaks
# Define the Cipher with your data (Encryption Key and IV)
cipher1 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
cipher2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = df['values'][4]
eypt = encrypt(message, cipher1)
print(decrypt(eypt, cipher2))
 

Я могу расшифровать строку после вызова из базы данных, но на следующий день зашифрованная строка изменяется, что не соответствует моему коду. Как я могу это заморозить? Каждый день сохранять постоянную строку?

Комментарии:

1. здесь вообще ничего не обновляет вашу базу данных … поэтому не знаю, как вы ожидаете, что кто-то скажет вам, как не обновлять базу данных в этом коде …

2. Как мы можем что-то знать о вашей базе данных?

3. @FrankYellin проблема в том, как сохранить зашифрованный ключ статичным. Из базы данных я получаю свои входные данные, которые хранятся в виде шестнадцатеричной строки. Для упрощения я конвертирую свой пароль в формат hexi и сохраняю его в базе данных. Позже, после получения строки обратно из базы данных, я передаю ее в decrypt(). Проблема здесь в том, что строка hexi меняется каждый день. Следовательно, код не работает. Есть ли какой-нибудь способ сделать его статичным?

4. База данных @JoranBeasley используется только для хранения строки. Я не применяю к строке какую-либо функцию или что-либо еще. Все шифрование и дешифрование происходит с использованием python. Проблема в том, что я каждый день получаю разные зашифрованные строки. Как я могу сделать это статичным?

5. одна и та же строка всегда будет расшифровываться с помощью одной и той же строки … таким образом, либо строка в базе данных меняется, либо меняется ключ, который вы используете для ее расшифровки … ни одно из этих событий не показано в этом коде

Ответ №1:

Я получил решение, зашифровав ключ с помощью байтов() Используйте метод байтов для хранения ключа в защищенном файле конфигурации или базе данных и зашифруйте строку байтов, чтобы получить ключ. После этого используйте любой метод шифрования с подходящим алгоритмом, чтобы зашифровать данные и замаскировать их.