SHARE
TWEET

meecrob

a guest Oct 16th, 2009 216 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '''Bifid cypher/decypher for strings
  2.         Author: meecrob
  3.         For: programmingpraxis.com
  4.         URL: http://programmingpraxis.com/2009/10/13/bifid-cipher/'''
  5.  
  6. cypher_table = ['ABCDE', 'FGHIK', 'LMNOP', 'QRSTU', 'VWXYZ']
  7.  
  8. def getLetter(row,col):
  9.         return cypher_table[row-1][col-1] # normalize for 0 based access
  10.  
  11. def getRowCol(letter):
  12.         for val in cypher_table:
  13.                 if val.find(letter) != -1:
  14.                         return cypher_table.index(val)+1, val.find(letter)+1 # increment by one to adhere to bifid cypher
  15.         return -1, -1 #return tuple with -1 -1 if unknown
  16.  
  17. def cypher(input_string):
  18.         rows=list()
  19.         columns=list()
  20.         for letter in input_string:
  21.                 row, column = getRowCol(letter)
  22.                 rows.append(row)
  23.                 columns.append(column)
  24.         #print input_string
  25.         #print rows
  26.         #print columns
  27.         combined = (rows+columns)[:]
  28.         final=list()
  29.         for i in range(len(combined)/2):
  30.                 final.append(getLetter(combined[i*2],combined[i*2+1])) #convert pairs into letters
  31.        
  32.         return "".join(final) #return string instead of a list
  33.        
  34. def decypher(input_string):
  35.         rows=list()
  36.         columns=list()
  37.         combined=list()
  38.  
  39.         for letter in input_string:
  40.                 row,col = getRowCol(letter)
  41.                 combined.append(row) #append pairs
  42.                 combined.append(col)
  43.  
  44.         rows = combined[0:(len(combined)/2)] # first half is rows
  45.         columns = combined[(len(combined)/2):len(combined)] #second half is columns
  46.         final=list()
  47.         for i in range(len(rows)):
  48.                 final.append(getLetter(rows[i],columns[i])) # get letters based on rows and columns
  49.         return "".join(final) #return string, not list
  50.  
  51. if __name__ == "__main__":
  52.         toCypString = "PROGRAMMINGPRAXIS"
  53.         cyp= cypher(toCypString)
  54.         print toCypString
  55.         print cyp
  56.         print decypher(cyp)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top