def encrypt(outfile, blocks, n):
    e_hex_str = ""
    for b in blocks:
        e_num = pow(int(b), e, n)
        e_numbv = BitVector(intVal=e_num, size=256)
        e_hex_str = e_hex_str + e_numbv.get_hex_string_from_bitvector()
    return e_hex_str
コード例 #2
0
ファイル: patel_RSA_hw06.py プロジェクト: iris37/ece404
 def RSA_decrypt(self):
     f = open("decrypt_hex.txt", 'a')
     FILEOUT = open(sys.argv[3], 'a')
     bv = BitVector(filename=sys.argv[2])
     while bv.more_to_read:
         bit_block = bv.read_bits_from_file(256)
         decrypted = self.CRT(int(bit_block))
         decrypted_unpadded = BitVector(intVal=decrypted, size=256)[128:]
         decrypted_unpadded.write_to_file(FILEOUT)
         f.write(decrypted_unpadded.get_hex_string_from_bitvector())
     FILEOUT.close()
     return
def encrypt(outfile, blocks, p, q, n, d, pbv, qbv, nbv, dbv):
	e_hex_str = ""
	for b in blocks:
		e_num = pow(int(b), e, n)
		e_numbv = BitVector(intVal = e_num, size = 256)
		e_hex_str = e_hex_str + e_numbv.get_hex_string_from_bitvector()
	writeToFile(outfile, e_hex_str)

	with open('keys','wb') as fp:
		cPickle.dump(pbv,fp)
		cPickle.dump(qbv,fp)
		cPickle.dump(nbv,fp)
		cPickle.dump(dbv,fp)
コード例 #4
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())
コード例 #5
0
ファイル: patel_RSA_hw06.py プロジェクト: iris37/ece404
 def RSA_encrypt(self):
     f = open("encrypt_hex.txt", 'a')
     FILEOUT = open(sys.argv[3], 'a')
     self.fix_file(sys.argv[2])
     bv = BitVector(filename=sys.argv[2])
     while bv.more_to_read:
         bit_block = bv.read_bits_from_file(128)
         bit_block.pad_from_right(128 - len(bit_block))
         bit_block.pad_from_left(128)
         encrypted_int = pow(int(bit_block), self.e, self.n)
         encrypted = BitVector(intVal=encrypted_int, size=256)
         encrypted.write_to_file(FILEOUT)
         f.write(encrypted.get_hex_string_from_bitvector())
     FILEOUT.close()
     return
コード例 #6
0
 def encrypt(self):
     hex_files = ['hex1.txt', 'hex2.txt', 'hex3.txt']
     enc_files = ['enc1.txt', 'enc2.txt', 'enc3.txt']
     for i in range(3):
         f = open(hex_files[i], 'a')
         FILEOUT = open(enc_files[i], 'a')
         self.fix_file(sys.argv[1])
         bv = BitVector(filename=sys.argv[1])
         while bv.more_to_read:
             bit_block = bv.read_bits_from_file(128)
             bit_block.pad_from_right(128 - len(bit_block))
             bit_block.pad_from_left(128)
             encrypted_int = pow(int(bit_block), self.e,
                                 self.key_info[i][2])
             encrypted = BitVector(intVal=encrypted_int, size=256)
             encrypted.write_to_file(FILEOUT)
             f.write(encrypted.get_hex_string_from_bitvector())
         FILEOUT.close()
     return
def getDecryptionSubBox():
    dbox = [[0 for i in range(16)] for j in range(16)]
    modulus = BitVector(bitstring='100011011')
    n = 8
    d = BitVector(bitstring='00000101')
    for i in range(16):
        for j in range(16):
            i_s = bin(i)[2:].zfill(4)
            j_s = bin(j)[2:].zfill(4)
            bv = BitVector(bitstring=i_s + j_s)
            dboxt = bv.deep_copy()
            for k in range(8):
                bv[k] = dboxt[(k - 2) % 8] ^ dboxt[(k - 5) % 8] ^ dboxt[
                    (k - 7) % 8] ^ d[k]
            if bv.get_hex_string_from_bitvector() != '00':
                dbox[i][j] = bv.gf_MI(modulus, n)
            else:
                dbox[i][j] = BitVector(bitstring='00000000')
            dbox[i][j] = dbox[i][j].get_hex_string_from_bitvector()

    return dbox
コード例 #8
0
    def crack(self):
        f = open("cracked_hex.txt", 'a')
        FILEOUT = open(sys.argv[2], 'a')
        N = int(self.key_info1[2]) * int(self.key_info2[2]) * int(
            self.key_info3[2])
        enc_files = ['enc1.txt', 'enc2.txt', 'enc3.txt']
        bv = BitVector(filename=enc_files[0])
        bv2 = BitVector(filename=enc_files[1])
        bv3 = BitVector(filename=enc_files[2])
        while bv.more_to_read:
            bit_block = bv.read_bits_from_file(256)
            bit_block2 = bv2.read_bits_from_file(256)
            bit_block3 = bv3.read_bits_from_file(256)
            decrypted = self.CRT(int(bit_block), int(bit_block2),
                                 int(bit_block3), N)

            # VERY UNRELIABLE --> Doesn't always terminate and not always accurate and very slow(May need to do a few runs)
            decrypted2 = solve_pRoot(3, decrypted)

            decrypted_unpadded = BitVector(intVal=decrypted2, size=256)[128:]
            decrypted_unpadded.write_to_file(FILEOUT)
            f.write(decrypted_unpadded.get_hex_string_from_bitvector())
        FILEOUT.close()
        return