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])
コード例 #3
0
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())