파이썬 pycryptodome 이용하여 db 복호화 어떻게 해야하나요?
조회수 348회
실무?에서 어떻게 사용하는지 궁금해서 질문 드립니다.
- 암복호화 작업을할때 프로그램 언어 모듈을 이용하여 하는게 맞는지 아니면 각 DBMS가 지원하는 암호화 함수(mysql 경우 AES_ENCRYPT, AES_DECRYPT)를 사용하는지 궁금합니다.
- 만약 프로그램 언어 모듈로 암호화를 할때 DB컬럼은 문자값으로 값을 저장하나요?
try:
cursor.execute("""create table test(
id serial primary key,
plainData varchar(10),
cihperData varchar(255),
nonce varchar(255)
)""")
conn.commit()
except:
conn.rollback()
key = b'0000000000000000'
for i in range(10):
randomValue = str(random.randint(1, 10000))
plain_data = randomValue.encode("utf-8")
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
cipherdata = cipher.encrypt(plain_data)
# print(cipherdata)
cursor.execute("insert into test(plainData, cihperData, nonce) values(%s, %s, %s)", (randomValue, cipherdata, nonce))
conn.commit()
cursor.execute("select * from test")
serchDB = cursor.fetchone()
strTobyteCipherData = bytes(str(serchDB[2]).replace('\\',''), "utf-8")
strTobyteNonce = bytes(str(serchDB[3]).replace('\\', ''), "utf-8")
# print(serchDB, strTobyteCipherData, strTobyteNonce)
cipher = AES.new(key, AES.MODE_EAX, strTobyteNonce)
# print(cipher)
verify = cipher.verify(cipher) #에러발생
de_cihperdata = cipher.decrypt(serchDB[2]).decode("utf-8")
# # print(de_cihperdata)
- 위코드처럼 파이썬 암호화 모듈을 이용해서 평문과 암호문,논스 값(이런 중요한 값도 DB에 저장하나요?)을 넣고 select로 불러와 복호화 하는데 오류가 납니다 원인이 뭘까요?? 예제 값은
(1, '3148', '\\x9b1721d6', '\\x84695b4916a31be1d9989ec3f857edc9') b'x9b1721d6' b'x84695b4916a31be1d9989ec3f857edc9'
입니다(id/평문/암호화/논스)바이트변환암호화,바이트변환논스
근데 프린트로cipherdata
데이터 값을 찍어보면b'\xe8\xc1\xf2\xd9', b'*DF\xbf', b'\x8a\xf8\x06\x0e'
게 나오는데\
값도 DB에 저장되야하는거 아닌가요??
댓글 입력