#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:
Я получил решение, зашифровав ключ с помощью байтов() Используйте метод байтов для хранения ключа в защищенном файле конфигурации или базе данных и зашифруйте строку байтов, чтобы получить ключ. После этого используйте любой метод шифрования с подходящим алгоритмом, чтобы зашифровать данные и замаскировать их.