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이 바이트를 다시 읽을 수 있는 문자열로 변환하는 데 도움이 되기 때문입니다.하지만 덮개 아래는 그냥 바이트 줄이에요.
바이트 문자열을 문자열로 변환하는 경우(str
MySQL이 저장할 수 있는 것VARCHAR
필드는 다음과 같이 간단합니다.
b'my string'.decode()
이 경우 핵심은 다음과 같습니다.
key = Fernet.generate_key().decode()
다른 옵션:
또는 원시 바이트 문자열을 데이터베이스에 저장하려는 경우 다음 명령을 변환할 수 있습니다.encryption_key
에 열을 달다.BLOB
data 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
'source' 카테고리의 다른 글
파일을 한 줄씩 읽다 (0) | 2022.10.19 |
---|---|
행이 있는지 확인하기 위한 두 가지 방법 중 선택(하위 쿼리 수가 더 많은 경우와 왼쪽 조인 수가 더 많은 경우 (0) | 2022.10.19 |
MySQL/MariaDB의 PERCENTILE_CONT 대체 방법 (0) | 2022.10.19 |
AWS Aurora용 Spring Boot의 MariaDB 구성 - Reader 인스턴스에 쿼리 라우팅 쓰기 (0) | 2022.10.19 |
pip은 사용자 지정 버전 대신 잘못된 캐시 패키지 버전을 사용합니다. (0) | 2022.10.19 |