예제 #1
0
def substitute(text,right_key,left_key,decipher):

    #Get the mappings for polybius squares and their inverse
    #The inverse is for lookups.
    plain_table,in_plain = get_polybius(inverse_map=True)
    right_table,in_right = get_polybius(key=right_key,
                                        inverse_map=True)
    left_table,in_left = get_polybius(key=left_key,
                                        inverse_map=True)
    
    #Get the digrams for the text as a list of tuples.
    text = get_digrams(list(text),allow_doubles=True)
    
    out_text = []
    for i in text:
        if not decipher:
            a_coords = plain_table[i[0]]
            b_coords = plain_table[i[1]]
         
            out_text.append(in_right[(a_coords[0],b_coords[1])])
            out_text.append(in_left[(b_coords[0],a_coords[1])])
        else:
            a_coords = right_table[i[0]]
            b_coords = left_table[i[1]]

            out_text.append(in_plain[(a_coords[0],b_coords[1])])
            out_text.append(in_plain[(b_coords[0],a_coords[1])])

    return ''.join(out_text).upper()
예제 #2
0
파일: playfair.py 프로젝트: Alia-b/Ciphers
def create_cipher(args):
    """
    Cipher things in a specified way.
    """
    if args.text:
        text = args.text
    elif args.file:
        text = open(args.file).read()
 
    digrams = get_digrams(list(text),'x') 

    out_text = []

    table = get_polybius(key=args.pass_phrase)
    #Creates an inverse table for lookups
    in_table = {}
    for i in table:
        in_table[table[i]] = i
    
    for i in digrams:
        out_text += get_new_digram(i,table,in_table,args.decipher)

    return ''.join(out_text)