def crackEncText(crackfile, estr123, n123): n1 = int(n123[0]) n2 = int(n123[1]) n3 = int(n123[2]) M1 = n2 * n3 M2 = n1 * n3 M3 = n1 * n2 M1I = BitVector(intVal=M1).multiplicative_inverse(n123[0]) M2I = BitVector(intVal=M2).multiplicative_inverse(n123[1]) M3I = BitVector(intVal=M3).multiplicative_inverse(n123[2]) c1 = M1 * int(M1I) c2 = M2 * int(M2I) c3 = M3 * int(M3I) block1 = getEncBlocksFromHexString(estr123[0]) block2 = getEncBlocksFromHexString(estr123[1]) block3 = getEncBlocksFromHexString(estr123[2]) d_str = "" for i in range(len(block1)): e1 = int(block1[i]) e2 = int(block2[i]) e3 = int(block3[i]) M_cube = pow(e1 * c1 + e2 * c2 + e3 * c3, 1, n1 * n2 * n3) M = solve_pRoot(3, M_cube) bv = BitVector(intVal=M, size=128) d_str = d_str + bv.get_text_from_bitvector() d_str = filter(lambda x: x in string.printable, d_str) writeToFile(crackfile, d_str[:-1])
def decrypt(outfile, decfile, p, q, n, d, pbv, qbv, nbv, dbv): enc_blocks = getEncBlocksFromHexFile(outfile) d_text_str = "" for eb in enc_blocks: d_num = crtPow(int(eb), d, p, q) d_numbv = BitVector(intVal = d_num, size = 256) d_numbv = d_numbv[128:256] d_text_str = d_text_str + d_numbv.get_text_from_bitvector() #d_text_str = d_text_str.replace('\n', '') writeToFile(decfile, d_text_str[:-1])
def writeFile(data_block, filename, type, mode): ## Open the output file out = open(filename, 'wa') ## Depending if we're encrypting or decrypting for the size of byte to write ## 256 - Encrypt, 128 - Decrypt for data in data_block: if type: bv = BitVector(intVal=data, size=256) else: bv = BitVector(intVal=data, size=128) if mode: out.write(bv.get_text_from_bitvector()) else: out.write(bv.get_hex_string_from_bitvector())