파이썬 코딩 (pycrypto, dahuffman 모듈이용) 질문입니다!

조회수 255회

제가 원하는 코딩의 구조는 이런겁니다

  1. 평문 text 입력 → 2. huffman 압축 → 3. 암호화(DES, AES, DES3) → 4. 80Byte 단위 분할 → 5. 16진값(HEX) 변환

이런 순서로 평문 text만 입력하면 최종적으로 huffman으로 압축되고 대칭키방식으로 암호화된 16진 데이터값이 80byte 단위로 출력되는 것을 목표로 했습니다.

그래서 좀 찾아보니 파이썬의 pycrypto 모듈과 dahuffman 모듈을 쓰면 허프만 코딩과 암호화과정을 쉽게 할 수 있는것 같더군요

아래 코드는 제가 지인의 도움을 받아 작성한 코드입니다.

!pip install dahuffman
!pip install des 
# 입력값 80 byte
aa = "ABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRST"

## huffman coding
from dahuffman import HuffmanCodec
codec = HuffmanCodec.from_data(aa)

encoded = codec.encode(aa)

print("Huffman Coding")
print(encoded)

## DES 선언부
from des import DesKey
key0 = DesKey(b"some key")                  # for DES
key1 = DesKey(b"a key for TRIPLE")          # for 3DES, same as "a key for TRIPLEa key fo"
key2 = DesKey(b"a 24-byte key for TRIPLE")  # for 3DES
key3 = DesKey(b"1234567812345678REAL_KEY")  # for DES, same as "REAL_KEY"

#DES 쓰기 위해 8개씩 나누기
splited = [encoded[i:i+8] for i in range(0, len(encoded), 8)]

# DES 암호화하기
enc = []
for ln in splited :
  if len(ln) == 8:
    enc.append(key0.encrypt(ln))
  else :
    ## 길이 길어지는건 0으로 padding 
    tmp = 8 - len(ln)
    ln += bytes('0', encoding='utf-8') * tmp
    enc.append(key0.encrypt(ln))


# DES 암호화 출력 HEX로 출력됨
print("DES")
print(enc)

그런데 이렇게 하면 결과값이 이렇게 나옵니다.

Huffman Coding
b'\xbe3\xad\xf3\xbe\xf8\t\x1a+<M_\x19\xd6\xf9\xdf|\x04\x8d\x15\x9e&\xaf\x8c\xeb|\xef\xbe\x02F\x8a\xcf\x13W\xc6u\xbew\xdf\x01#Eg\x89\xab'
DES
[b'"\x0217\rh\xfd\x9d', b'\x98\xa7\x89\x99o\xc2\x94\x7f', b'E\xf4a\x18\xfc\xe0|\xc4', b'\xcf\xc6\xcf>\xc1\xe9\xc6\xa7', b'?\xb3\x1dN\x0fHj?', b'\xd4J$\xf7TT\xeb\xd6']

문제점은 1. 결과값이 전부 \로 끊겨서 나오고,

  1. DES같은 경우는 거기에 추가해서 8byte씩 끊겨서 나온다는 것입니다

제 생각에는 des 모듈 말고 pycrypto 모듈 이용하면 더 간편하게 암호화할 수 있을것같기도한데... 사실 제가 코딩 왕초보라 어디서부터 건드려야할지 감이 안와서 질문드려봅니다. 지푸라기라도 잡는 심정으로 질문드리니 혹시 아시는분은 답변해주시면 정말 감사하겠습니다!

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

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

(ಠ_ಠ)
(ಠ‿ಠ)