source

Python - SQL 데이터베이스에 암호화 키 저장

gigabyte 2022. 10. 19. 21:08
반응형

Python - SQL 데이터베이스에 암호화 키 저장

"비밀번호 보호기"에서 작업하며 "암호화" 모듈을 사용하여 암호를 암호화합니다.암호화로 생성된 키도 데이터베이스에 저장해야 하는데, 실제로 어떻게 하는지 모르겠습니다.

구글 검색을 직접 해봤는데 '바이트 문자열'이라고 불리는 것 같아요.하지만 그게 뭔지 잘 모르겠어.

현재 가지고 있는 것은 다음과 같습니다.

from cryptography.fernet import Fernet
import mysql.connector

db = mysql.connector.connect(
    host='localhost',
    user='root',
    password='',
    database='password_saver'
)

cursor = db.cursor()

key = Fernet.generate_key()

cursor.execute(f"INSERT INTO `encryption`(`encryption_key`) VALUES ({key})")

이 코드를 사용하면 다음 오류가 발생합니다.mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'b'cryptographys key is here')' at line 1

SQL에 사용해야 하는 특정 데이터 유형이 있는지 아니면 python에서 수행해야 하는 데이터 유형이 있는지 확실하지 않습니까?

TL;DR

용도:key = Fernet.generate_key().decode()쿼리를 파라미터화된 쿼리로 변경합니다.


여기에는 다음 두 가지 주요 요소가 있습니다.

  • 바이트 문자열이란?
  • SQL 주입

바이트 문자열:

컴퓨터의 모든 것이 숫자라는 규칙에서, '바이트 문자열'은 단지 바이트 문자열일 뿐이며, 이는 사람이 읽을 수 있는 것이 아닙니다.하지만 우리가 읽을 수 있는 이유는b'my string'Python이 바이트를 다시 읽을 수 있는 문자열로 변환하는 데 도움이 되기 때문입니다.하지만 덮개 아래는 그냥 바이트 줄이에요.

그 문제에 관한 더 읽기(재미있는)

바이트 문자열을 문자열로 변환하는 경우(strMySQL이 저장할 수 있는 것VARCHAR필드는 다음과 같이 간단합니다.

b'my string'.decode() 

이 경우 핵심은 다음과 같습니다.

key = Fernet.generate_key().decode()

다른 옵션:

또는 원시 바이트 문자열을 데이터베이스에 저장하려는 경우 다음 명령을 변환할 수 있습니다.encryption_key에 열을 달다.BLOBdata type 입니다.바이트 저장에 사용되는 'Binary Large OBject' 필드입니다.단, 키 값을 사용할 때는 문자열로 변환해야 합니다.변환은 앞에서 하고 문자열만 저장해두는 게 낫죠.


SQL 주입:

이 내용을 읽어주세요.여기서는 다루지 않겠습니다.중요한 내용입니다.

짧은 이야기는 매개 변수화된 쿼리를 사용하는 입니다.

변경:

cursor.execute(f"INSERT INTO `encryption` (`encryption_key`) VALUES ({key})")

이를 위해:

cursor.execute("INSERT INTO `encryption` (`encryption_key`) VALUES (%s)", (key,))   

언급URL : https://stackoverflow.com/questions/67192044/python-store-cryptography-keys-in-sql-database

반응형