07.07.2023 Views

Implementing-cryptography-using-python

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

124 Chapter 4 ■ Cryptographic Math and Frequency Analysis

will brute-force the decryption by examining the frequency analysis of each

attempt. You will know you have the correct key once you have a frequency

analysis of .065:

import urllib.request, ssl, random

# get the text of the Declaration of Independence

response = urllib.request.urlopen("https://raw.githubusercontent.com/

noidentity29/AppliedCryptoPython/master/declaration.txt", context=ssl._

create_unverified_context())

originalText = response.read()

# Strip out all non-alphabet characters

# There are a number of ways to do this but this is the simplest to

understand

modifiedText = str(originalText.strip())

modifiedText = modifiedText.replace(" ", "")

modifiedText = " ".join(modifiedText.split())

modifiedText = modifiedText.lower()

plaintext = ""

for c in modifiedText:

if (c.isalpha()):

plaintext = plaintext + c

# Encrypt the plaintext using a random Caesar shift

def shiftBy(c, n):

return chr(((ord(c) - ord('a') + n) % 26) + ord('a'))

caesar_key = random.randint(1,25)

print ("shhh the secret caesar key is: ", caesar_key)

encrypted = list(map(lambda x: shiftBy(x, caesar_key), plaintext))

# Use FA to determine Caesar key for encrypted text

normal_freqs = {'a': 0.080642499002080981, 'c': 0.026892340312538593,

'b': 0.015373768624831691,

'e': 0.12886234260657689, 'd': 0.043286671390026357, 'g': 0.019625534749730816, 'f':

0.024484713711692099, 'i': 0.06905550211598431, 'h': 0.060987267963718068, 'k':

0.0062521823678781188, 'j': 0.0011176940633901926, 'm': 0.025009719347800208, 'l':

0.041016761327711163, 'o': 0.073783151266212627, 'n': 0.069849754102356679, 'q':

0.0010648594165322703, 'p': 0.017031440203182008, 's': 0.063817324270355996, 'r':

0.06156572691936394, 'u': 0.027856851020401599, 't': 0.090246649949305979, 'w':

0.021192261444145363, 'v': 0.010257964235274787, 'y': 0.01806326249861108, 'x':

0.0016941732664605912, 'z': 0.0009695838238376564}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!