보안/암호

전치 암호 도구 구현_2

revivekirin 2023. 8. 18. 19:05
ENC = 0
DEC = 0

def parsekey(key):
    tmp = []
    key.upper()

    for i, k in enumerate(key):
        tmp.append((i,k))     #키:인덱스, 값:알파벳

    tmp = sorted(tmp, key=lambda x:x[1])   #tmp 알파벳 순서에 따라 정렬

    enc_table = {}
    dec_table = {}
    for i, r in enumerate(tmp):    #i:알파벳 순서에 따른 인덱스, r[0]:처음 인덱스
        enc_table[r[0]] = i
        dec_table[i] = r[0]

    return enc_table, dec_table

위 parsekey 함수는 키값을 전달받아 1차로 열 번호로 인덱스를 매겨주고, 2차로 알파벳 순서에 따라 인덱스를 매겨줍니다.

아래 코드를 살펴보면 첫번째로 프린트된 tmp는 열 순서에 따라 인덱스가 매겨지고

두번쨰로 프린트된 tmp는 k의 값, 즉 알파벳의 순서에 따라 인덱스가 매겨져 리스트 내에서 튜플들이 인덱스에 따라 이동해음을 알 수 있습니다.

key = 'TRACE'
tmp = []
for i, k in enumerate(key):
    tmp.append((i, k))

print(tmp)

tmp = sorted(tmp, key = lambda x:x[1])

print(tmp)

결과-> [(0, 'T'), (1, 'R'), (2, 'A'), (3, 'C'), (4, 'E')]
            [(2, 'A'), (3, 'C'), (4, 'E'), (1, 'R'), (0, 'T')]

 

#lambda 매개변수 : 표현식

 

즉 이전 포스트에서 언급한

T R A C E
열 번호 0 1 2 3 4
순서 4 3 0 1 2

표가 만들어졌습니다.