donchanee

Shift Cipher , Vigenere Cipher 본문

카테고리 없음

Shift Cipher , Vigenere Cipher

donchanee 2018. 10. 27. 18:19
728x90

Shift Cipher 와 Vigenere Cipher의 파이썬 코드이다.


정확한 코드인지는 아직 모르겠다.


Shift Cipher 의 정의 : https://en.wikipedia.org/wiki/Caesar_cipher

Vigenere Cipher 의 정의 : https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher


깃허브에도 올려놓았다.


<


import random


def shift_encrypt(msg, key):

    output = ''

    alphabet = "abcdefghijklmnopqrstuvwxyz"

    

    for c in msg:

        index = alphabet.find(c)

        if index < 0:

            output += ' '

        else:

            new_index = (index + key) % len(alphabet)

            ctx = alphabet[new_index]

            output += ctx

    return output


def shift_decrypt(ctx, key):

    output = ''

    alphabet = "abcdefghijklmnopqrstuvwxyz"

    

    for c in ctx:

        index = alphabet.find(c)

        if index < 0:

            output += ' '

        else:

            new_index = (index - key) % len(alphabet)

            plain = alphabet[new_index]

            output += plain

    return output


def vigenere_genkey(n):

    output = ''

    alphabet = "abcdefghijklmnopqrstuvwxyz"


    for c in range(0, n):

        a = random.choice(alphabet)

        output += a

    return output


def vigenere_encrypt(msg, key):

    output = ''

    alphabet = "abcdefghijklmnopqrstuvwxyz"

    cnt = 0

    

    for c in msg:

        index = alphabet.find(c)

        keyindex = alphabet.find(key[cnt])

        cnt+=1

        if index < 0:

            output += ' '

        else:

            new_index = (index + keyindex) % len(alphabet)

            ctx = alphabet[new_index]

            output += ctx

    return output


def vigenere_decrypt(msg, key):

    output = ''

    alphabet = "abcdefghijklmnopqrstuvwxyz"

    cnt = 0

    

    for c in msg:

        index = alphabet.find(c)

        keyindex = alphabet.find(key[cnt])

        cnt+=1

        if index < 0:

            output += ' '

        else:

            new_index = (index - keyindex) % len(alphabet)

            plain = alphabet[new_index]

            output += plain

    return output


>


내가 실행한 결과로는 값이 소문자로는 제대로 나왔는데 아직 대문자 처리 부분과 여러가지 부분에서 모자람이 있는 것 같다.


그래도 암호를 만들어 보니 재미있었다.