암호학 - 2일차

2020. 1. 31. 18:11카테고리 없음

def caesar_cipher(msg, encdec, keys):
symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.'
results = ''
for i in msg:
if encdec == 'encrypt':
sum = (symbols.index(i) + 13) % len(symbols)
results += symbols[sum]
elif encdec == 'decrypt':
sum = (symbols.index(i) - 13) % len(symbols)
results += symbols[sum]
return results

msgs = 'This is my secret plaintext.'
key = 13
encrypt_messages = caesar_cipher(msgs, 'encrypt', key)
decrypt_messages = caesar_cipher(encrypt_messages, 'decrypt', key)

print("key = %s : cleartext Message: |%s|" % (key, msgs))
print("key = %s : Encrypt Message : |%s|" % (key, encrypt_messages))
print("key = %s : Decrypt Message : |%s|" % (key, decrypt_messages))

///////////////////////////////////////////////////////////////////////////////////////////

(정리)

시저(caesar Cipher) 암호 ---> 아핀 암호(Affine Cipher)

* C = E(P + K) mod 26          * C = E(P * K1 + K2) mod 26

단일 전치 암호 --> 다중 전치 암호 (etao)

                          * 비즈니어(Vegenre Cipher)

/////////////////////////////////////////////////////////////////////////////////////////

messages = 'Common sense is not so common.'
key = 8

encrypted = [''] * key

for num, char in enumerate(messages):
# print(num, char)
list_index = num % 8
# print(num, char, list_index)
encrypted[list_index] += char
# print(encrypted) ; input()

encrypted_msg = ''.join(encrypted)
print('plaintext = |%s|' % messages)
print('ciphertext = |%s|' %encrypted_msg)

////////////////////////////////////////////////////////////////////////////////

messages = 'Common sense is not so common.'
key = 8

def transposition_cipher():
encrypted = [''] * key

for num, char in enumerate(messages):
# print(num, char)
list_index = num % 8
# print(num, char, list_index)
encrypted[list_index] += char
# print(encrypted) ; input()

return ''.join(encrypted)


def main():
encrypted_msg = transposition_cipher()
print('plaintext = |%s|' % messages)
print('ciphertext = |%s|' % encrypted_msg)


if __name__ == '__main__':
main()

///////////////////////////////////////////////////////