파이썬 pycryptodome 이용하여 db 복호화 어떻게 해야하나요?

조회수 348회

실무?에서 어떻게 사용하는지 궁금해서 질문 드립니다.

  1. 암복호화 작업을할때 프로그램 언어 모듈을 이용하여 하는게 맞는지 아니면 각 DBMS가 지원하는 암호화 함수(mysql 경우 AES_ENCRYPT, AES_DECRYPT)를 사용하는지 궁금합니다.
  2. 만약 프로그램 언어 모듈로 암호화를 할때 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)
  1. 위코드처럼 파이썬 암호화 모듈을 이용해서 평문과 암호문,논스 값(이런 중요한 값도 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에 저장되야하는거 아닌가요??

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)