Hacking Secret Ciphers with Python

(Ann) #1
Chapter 20 – Frequency Analysis 305





  1. frequency taken from http://en.wikipedia.org/wiki/Letter_frequency



  2. englishLetterFreq = {'E': 12.70, 'T': 9.06, 'A': 8.17, 'O': 7.51, 'I':
    6.97, 'N': 6.75, 'S': 6.33, 'H': 6.09, 'R': 5.99, 'D': 4.25, 'L': 4.03, 'C':
    2.78, 'U': 2.76, 'M': 2.41, 'W': 2.36, 'F': 2.23, 'G': 2.02, 'Y': 1.97, 'P':
    1.93, 'B': 1.29, 'V': 0.98, 'K': 0.77, 'J': 0.15, 'X': 0.15, 'Q': 0.10, 'Z':
    0.07}

  3. ETAOIN = 'ETAOINSHRDLCUMWFGYPBVKJXQZ'

  4. LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'







  5. def getLetterCount(message):


  6. Returns a dictionary with keys of single letters and values of the




  7. count of how many times they appear in the message parameter.



  8. letterCount = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0,
    'H': 0, 'I': 0, 'J': 0, 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0,
    'R': 0, 'S': 0, 'T': 0, 'U': 0, 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0}



  9. for letter in message.upper():

  10. if letter in LETTERS:

  11. letterCount[letter] += 1



  12. return letterCount





  13. def getItemAtIndexZero(x):

  14. return x[0]





  15. def getFrequencyOrder(message):


  16. Returns a string of the alphabet letters arranged in order of most




  17. frequently occurring in the message parameter.






  18. first, get a dictionary of each letter and its frequency count



  19. letterToFreq = getLetterCount(message)




  20. second, make a dictionary of each frequency count to each letter(s)




  21. with that frequency



  22. freqToLetter = {}

  23. for letter in LETTERS:

  24. if letterToFreq[letter] not in freqToLetter:

  25. freqToLetter[letterToFreq[letter]] = [letter]

  26. else:

  27. freqToLetter[letterToFreq[letter]].append(letter)



http://en.wikipedia.org/wiki/Letter_frequency - Hacking Secret Ciphers with Python - free download pdf - issuhub">
Free download pdf