Beispiel #1
0
 def encrypt(self):
     if self.inputfile == "":
         tk.messagebox.showwarning("Error", "No input file")
         return
     try:
         password = tk.simpledialog.askstring("Password",
                                              "Enter password",
                                              show='*')
         password = hashlib.sha512(
             password.encode(encoding='UTF-8')).hexdigest()[0:30]
         confirm_password = tk.simpledialog.askstring("Confirm password",
                                                      "Confirm password",
                                                      show='*')
         confirm_password = hashlib.sha512(
             confirm_password.encode(encoding='UTF-8')).hexdigest()[0:30]
         while password != confirm_password:
             password = tk.simpledialog.askstring("Passwords do not match",
                                                  "Re-enter password",
                                                  show='*')
             password = hashlib.sha512(
                 password.encode(encoding='UTF-8')).hexdigest()[0:30]
             confirm_password = tk.simpledialog.askstring(
                 "Confirm password", "Confirm password", show='*')
             confirm_password = hashlib.sha512(
                 confirm_password.encode(
                     encoding='UTF-8')).hexdigest()[0:30]
         encryptor.encrypt(
             self.inputfile,
             RSA.generate_key_from_pwd(password).generate_public_key(),
             self.outputfile.get())
     except IOError:
         tk.messagebox.showerror("Error", "Cannot open file")
Beispiel #2
0
 def test(self):
     for testfile in os.listdir("./"):
         print("Running test on: {filename}".format(filename=testfile),
               file=sys.stderr)
         encryptor.encrypt(testfile, encryptor.public_key_message,
                           "_encrypted")
         decryptor.decrypt("_encrypted", decryptor.private_key_message,
                           "_decrypted")
         self.assertTrue(
             filecmp.cmp(testfile, "_decrypted"),
             "Decrypted file is different from original: {filename}".format(
                 filename=testfile))
Beispiel #3
0
 def get_db_prep_value(self, value, connection=None, prepared=False):
     if isinstance(value, bytes):
         value = value.decode('utf-8')
     value = super().get_db_prep_value(value=value,
                                       connection=connection,
                                       prepared=prepared)
     return encryptor.encrypt(value)
Beispiel #4
0
def test1(correct_output, offset=0):
    fd, temp_path = tempfile.mkstemp()
    os.remove(temp_path)
    fh = os.fdopen(fd, 'w+')

    uuid = 0
    server = "server"

    encrypt(correct_output, 0, fh, uuid, server)
    fh.seek(0, os.SEEK_END)
    enc_len = fh.tell()
    fh.seek(0, os.SEEK_SET)
    dec = decrypt(fh.read(enc_len), 0, True, uuid, server)

    if (dec != correct_output):
        sys.exit(1)
Beispiel #5
0
    def test_encrypt_decrypt(self):
        data = "encrypted decrypted \n data1"
        key = b'1234567890123456'

        encrypted = encryptor.encrypt(key,data)
        decrypted = encryptor.decrypt(key,encrypted)

        self.assertEqual(decrypted,data)
Beispiel #6
0
    def test_encryption_standard(self):
        data = "message 1"
        key = b'1234567890123456'
        encrypted_code = b'uWuoiYApeiS0i2cQ4tU7gQ=='

        encrypted = encryptor.encrypt(key, data)

        self.assertEqual(encrypted,encrypted_code)
Beispiel #7
0
def crack(input, output):
    f = open(input, "r")
    data = f.read()
    f.close()
    temp = filter(lambda x: x.isalpha(), data)
    freq = {}
    for i in "abcdefghijklmnopqrstuvwxyz":
        freq[i] = 0
    for c in temp:
        freq[c] += 1
    freq = sorted(freq.iteritems(), key=lambda (k, v): (-v, k))
    letters = "\netaoinhsrdlumcwgfypbkvxjxz"
    g = open("freq.txt", "w")
    for key, value in freq:
        g.write(key)
    g.write(letters)
    g.close()
    encrypt(input, output, "freq.txt")
Beispiel #8
0
def crack(input, output):
	f = open(input, "r")
	data = f.read()
	f.close()
	temp = filter(lambda x: x.isalpha(), data)
	freq = {}
	for i in "abcdefghijklmnopqrstuvwxyz":
		freq[i] = 0
	for c in temp:
		freq[c] += 1
	freq = sorted(freq.iteritems(), key = lambda (k,v):(-v, k))
	letters = "\netaoinhsrdlumcwgfypbkvxjxz"
	g = open("freq.txt", "w")
	for key, value in freq:
		g.write(key)
	g.write(letters)
	g.close()
	encrypt(input, output,"freq.txt")
Beispiel #9
0
def test_vigenere_cipher():
    assert encrypt('vigenere', 'encode', 'aabdBE', 'ab') == 'abbeBF'
    assert encrypt('vigenere', 'decode', 'abbeBF', 'ab') == 'aabdBE'

    with open('./tests/text.txt') as input_file:
        input_text = input_file.read()

    key = 'afB wi!WEdjc#'
    assert encrypt('vigenere', 'decode',
                   encrypt('vigenere', 'encode', input_text, key),
                   key) == input_text

    assert encrypt('vigenere', 'encode', input_text, 'a') == input_text
    assert encrypt('vigenere', 'decode', input_text, 'a') == input_text

    assert encrypt('vigenere', 'encode', input_text,
                   'Le#') == encrypt('vigenere', 'encode', input_text,
                                     'Le#Le#')
    assert encrypt('vigenere', 'decode', input_text,
                   'Le#') == encrypt('vigenere', 'decode', input_text,
                                     'Le#Le#')
Beispiel #10
0
    def test_secret_encryption(self):
        assert conf.get(ENCRYPTION_KEY) == 'my_key'
        assert conf.get(ENCRYPTION_SECRET
                        ) == 'qMGwKR21SAjprV0XOJUI4SoI-MLFoTxN1ahZndKREL4='
        encryptor.validate()
        encryptor.setup()

        value = 'foo'
        encrypted_value = encryptor.encrypt(value)

        assert encrypted_value.startswith('{}my_key$'.format(
            EncryptionManager.MARKER))
        assert encryptor.decrypt(encrypted_value) == 'foo'
Beispiel #11
0
def askForData():
    isValid = False

    while not isValid:
        user = input("Enter the bot's username > ")
        pas = input("Enter the bot's password > ")
        try:
            scratch = scratchapi.ScratchUserSession(user, pas)
            isValid = True
        except:
            print("Invalid username or password")

    return user, str(encryptor.encrypt(pas), "utf-8")
Beispiel #12
0
def test_caesar_cipher():
    assert encrypt('caesar', 'encode', 'abb2', 2) == 'cdd2'
    assert encrypt('caesar', 'decode', 'cdd2', 2) == 'abb2'

    assert encrypt('caesar', 'encode', 'defgEM', -2) == 'bcdeCK'
    assert encrypt('caesar', 'decode', 'cdeabA', -2) == 'efgcdC'

    with open('./tests/text.txt') as input_file:
        input_text = input_file.read()
    for i in range(0, 50, 2):
        encrypted_text = encrypt('caesar', 'encode', input_text, i)
        assert encrypted_text == encrypt('caesar', 'decode', input_text, -i)
        if i != 0:
            assert encrypted_text != input_text
        assert encrypt('caesar', 'decode', encrypted_text, i) == input_text
        assert encrypt('caesar', 'hack', encrypted_text) == input_text
def write():
    while True:
        input_message = f'{input("")}'

        client_data_partial = {}

        with open("data.pickle", "rb") as f:
            client_data_partial = pickle.load(f)

        if input_message.lower() == 'leave':
            global is_running
            is_running = False

            client.send("leave".encode('utf-8'))
            client_data_partial.pop(nickname.lower())

            with open("data.pickle", "wb") as f:
                pickle.dump(client_data_partial, f)

            break

        elif input_message.lower() == 'show':
            show_users(client_data_partial)

        else:
            try:
                receiver_nickname, input_text = input_message.split(' ', 1)

                if input_text != '':
                    if receiver_nickname.lower() in client_data_partial.keys():
                        text = text_to_numeric_cipher(input_text)
                        encrypted_message = encrypt(
                            int(text),
                            client_data_partial[receiver_nickname.lower()][0],
                            client_data_partial[receiver_nickname.lower()][1])
                        message = f"{receiver_nickname} {encrypted_message}"

                        client.send(message.encode('utf-8'))

                    else:
                        print(
                            f"[No user with nickname {receiver_nickname.capitalize()} present]"
                        )

                else:
                    print("[Empty Message]")
                    print("Follow - UserNickname Message")
            except:
                print("[Incorrect Message Format]")
                print("Follow - UserNickname Message")
Beispiel #14
0
    def write(self, path, buf, offset, fh):
        fh.seek(0, 0)

        self.externdata['size'] += len(buf)

        # Get information from metadata for Custos
        cuuid = self.externdata['cuuid']
        suuid = self.externdata['suuid']
        # Decrypt the data
        dec = decrypt(fh.read(), 0, fh, cuuid, suuid)
        enc_size = encrypt(dec+buf, 0, fh, cuuid, suuid)

        #return enc_size
        return len(buf)
Beispiel #15
0
    def test_default_encryption(self):
        assert conf.get(ENCRYPTION_KEY) is None
        assert conf.get(ENCRYPTION_SECRET) is None

        assert encryptor.encrypt('foo') == 'foo'
        assert encryptor.decrypt('foo') == 'foo'
Beispiel #16
0
    if message == 'Goodbye':
        c.send("okay".encode())
    else:
        key = message
        print('Key received!\n')
        c.send("Thanks for the key!".encode())
else:
    c.send("okay".encode())

while True:

    sock.listen(5)
    print("the server is listening...\n")

    c, addr = sock.accept()
    print("Connection established")

    message = c.recv(1024).decode()
    print("Message received")
    print("It is: " + message)

    decryMsg = decrypt(key, message)
    encryMsg = encrypt(key, decryMsg)

    c.send(encryMsg.encode())

    print("Response sent\n")

c.close()
sock.close()
Beispiel #17
0
 def get_output_text(self):
     """Вычисляет выходной текст, если вернулся None, делает текст пустым"""
     self._output_text = encrypt(self._cipher, self._mode, self._input_text, self._key)
     return self._output_text
Beispiel #18
0
# This code is written by Nicky Ru

from encryptor import encrypt

if __name__ == '__main__':
    message = input("Enter your message: ")  # e.g. 0123456789ABCDEF
    key = input("Enter your key: ")  # e.g. 133457799BBCDFF1
    result = encrypt(message, key)
    print("Your encrypted message is:", result.upper())

# See PyCharm help at https://www.jetbrains.com/help/pycharm/
 def get_db_prep_value(self, value, connection=None, prepared=False):
     value = super().get_db_prep_value(value=value, connection=connection, prepared=prepared)
     return encryptor.encrypt(value)
Beispiel #20
0
if __name__ == '__main__':
    # parse the arguments
    parser = argparse.ArgumentParser(description='Secure your file system')

    parser.add_argument('option', help='encrypt or decrypt')
    parser.add_argument('path', help='path to target file')

    args = parser.parse_args()

    # get the password
    password = getpass.getpass('Password: '******'Retype password: '******'Passwords don\'t match!')
        exit(0)

    # encrypt
    if args.option.lower() == 'encrypt':
        encryptor.encrypt(args.path, password)

    # decrypt
    elif args.option.lower() == 'decrypt':
        encryptor.decrypt(args.path, password)

    # invalid
    else:
        show_usage()
English letter frequency method would be accurate if the ciphertext is very long. \
For short ciphertext, it may not follow the statistical rule therefore the cracked text may not accurate or not accurate at all."


class DecryptMethod(Enum):
    FREQUENCY = 1
    HILL_CLIMBING = 2
    WORD_PATTERN = 3


def decrypt(input, decrypt_method):
    if decrypt_method == DecryptMethod.FREQUENCY:
        key = get_key_by_frequency(input)
    elif decrypt_method == DecryptMethod.HILL_CLIMBING:
        key = get_key_by_hill_climbing(input)
    elif decrypt_method == DecryptMethod.WORD_PATTERN:
        raise NotImplementedError
    else:
        raise Exception("Undefined decrypt method")
    return decrypt_from_key(input, key)


if __name__ == "__main__":
    print(test_input)
    encrypted = encrypt(test_input)
    print(encrypted)
    decrypted = decrypt(encrypted, DecryptMethod.FREQUENCY)
    print(decrypted)
    decrypted = decrypt(encrypted, DecryptMethod.HILL_CLIMBING)
    print(decrypted)
Beispiel #22
0
def test_with_empty_text():
    assert encrypt('caesar', 'encode', '', 123) == ''
    assert encrypt('caesar', 'decode', '', 123) == ''
    assert encrypt('caesar', 'hack', '') == ''
    assert encrypt('vigenere', 'encode', '', 'acfjwe') == ''
    assert encrypt('vigenere', 'decode', '', 'acfjwe') == ''
Beispiel #23
0
                        password.encode(encoding='UTF-8')).hexdigest()
                    confirm_password = getpass("Confirm password: "******"Encrypting " + file)
                    sys.stdout.flush()
                encryptor.encrypt(file, public_key)

        elif arguments.decrypt:
            # getting the password for generating the private key
            password = arguments.password
            if password is None:
                password = getpass("Enter password: "******"Decrypting " + file)
                    sys.stdout.flush()
                try:
Beispiel #24
0
def findBigram(input, output, CALIBRE):
	f = open(input, "r")
	data = f.read()
	f.close()
	temp = filter(lambda x: x.isalpha() or x in " \n\t", data)
	freq = {}
	for i in xrange(len(temp) - 1):
		if temp[i] in ' \n\t' or temp[i+1] in ' \t\n':
			continue
		try: 
			freq[temp[i] + temp[i+1]] +=1 
		except:
			freq[temp[i] + temp[i+1]] = 1
	freq = sorted(freq.iteritems(), key = lambda (k,v):(-v, k))
	keyFile = open("freq.txt", "r")
	alphabet = keyFile.readline().strip()
	chipher = keyFile.readline().strip()
	keyFile.close()
	for i in xrange(len(alphabet)):
		keys[alphabet[i]] = chipher[i]
	bigrams = ' ' + open("bigramfreq.txt", "r").read() + ' '
		
	def bigramUpdate():
		global freqBigramsUnfound
		global freqBigramsFound
		global keys
		freqDecrypted = {}
		for key, value in freq:
			freqDecrypted[keys[key[0]] + keys[key[1]]] =  value
		freqDecrypted = sorted(freqDecrypted.iteritems(), key = lambda (k,v):(-v, k))[:CALIBRE]
		freqBigramsFound = 0
		freqBigramsUnfound = []
		for key, value in freqDecrypted:
			if key in bigrams:
				freqBigramsFound += 1
			else:
				freqBigramsUnfound.append(key)

	def improveKey(curBigram):
		for n in xrange(2):
			c = curBigram [n]
			i = chipher.index(c)
			for di in (1, -1, 2, -2, 3, -3):
				if (-1 < i + di < len(chipher)):
					keys[alphabet[i]] = chipher[i + di]
					keys [alphabet[i + di]] = chipher[i]
					temp = ''.join(map(lambda x : keys[alphabet[i]] if x == c else x, curBigram))
					if temp in bigrams:
						return True
					else:
						keys[alphabet[i]] = chipher[i]
						keys[alphabet[i + di]] = chipher[i + di]
		return False
	
	def improveBigram(i):
		global keys
		oldKey = keys.copy()
		if not improveKey(i):
			return
		freqDecrypted = {}
		for key, value in freq:
			freqDecrypted[keys[key[0]] + keys[key[1]]] =  value
		freqDecrypted = sorted(freqDecrypted.iteritems(), key = lambda (k,v):(v, k))[-CALIBRE:]
	        count = 0
		for key, value in freqDecrypted:
			if key in bigrams:
				count += 1
		if count < freqBigramsFound:
			keys = oldKey.copy()
		else:
			bigramUpdate()
	
	bigramUpdate()		
	while freqBigramsUnfound:
		improveBigram(freqBigramsUnfound.pop())
	g = open("newKey.txt", "w")
	g.write(alphabet + "\n")
	for i in alphabet:
		g.write(keys[i])
	g.close()	
	encrypt(input, output, "newKey.txt")
Beispiel #25
0
import encryptor as e
import decryptor as d

if __name__ == "__main__":
    mode = input(
        "Please enter a mode. Enter 'e' for encryption and 'd' for decryption: "
    )
    if (mode.lower() == "e"):
        e.encrypt()
    elif (mode.lower() == "d"):
        print(d.decrypt())
    else:
        print(
            "Invalid mode. Exiting."
        )  #Eventually make this so that it loops until valid input is entered

    input("\nPress Enter key to quit")
Beispiel #26
0
def findBigram(input, output, CALIBRE):
    f = open(input, "r")
    data = f.read()
    f.close()
    temp = filter(lambda x: x.isalpha() or x in " \n\t", data)
    freq = {}
    for i in xrange(len(temp) - 1):
        if temp[i] in ' \n\t' or temp[i + 1] in ' \t\n':
            continue
        try:
            freq[temp[i] + temp[i + 1]] += 1
        except:
            freq[temp[i] + temp[i + 1]] = 1
    freq = sorted(freq.iteritems(), key=lambda (k, v): (-v, k))
    keyFile = open("freq.txt", "r")
    alphabet = keyFile.readline().strip()
    chipher = keyFile.readline().strip()
    keyFile.close()
    for i in xrange(len(alphabet)):
        keys[alphabet[i]] = chipher[i]
    bigrams = ' ' + open("bigramfreq.txt", "r").read() + ' '

    def bigramUpdate():
        global freqBigramsUnfound
        global freqBigramsFound
        global keys
        freqDecrypted = {}
        for key, value in freq:
            freqDecrypted[keys[key[0]] + keys[key[1]]] = value
        freqDecrypted = sorted(freqDecrypted.iteritems(),
                               key=lambda (k, v): (-v, k))[:CALIBRE]
        freqBigramsFound = 0
        freqBigramsUnfound = []
        for key, value in freqDecrypted:
            if key in bigrams:
                freqBigramsFound += 1
            else:
                freqBigramsUnfound.append(key)

    def improveKey(curBigram):
        for n in xrange(2):
            c = curBigram[n]
            i = chipher.index(c)
            for di in (1, -1, 2, -2, 3, -3):
                if (-1 < i + di < len(chipher)):
                    keys[alphabet[i]] = chipher[i + di]
                    keys[alphabet[i + di]] = chipher[i]
                    temp = ''.join(
                        map(lambda x: keys[alphabet[i]]
                            if x == c else x, curBigram))
                    if temp in bigrams:
                        return True
                    else:
                        keys[alphabet[i]] = chipher[i]
                        keys[alphabet[i + di]] = chipher[i + di]
        return False

    def improveBigram(i):
        global keys
        oldKey = keys.copy()
        if not improveKey(i):
            return
        freqDecrypted = {}
        for key, value in freq:
            freqDecrypted[keys[key[0]] + keys[key[1]]] = value
        freqDecrypted = sorted(freqDecrypted.iteritems(),
                               key=lambda (k, v): (v, k))[-CALIBRE:]
        count = 0
        for key, value in freqDecrypted:
            if key in bigrams:
                count += 1
        if count < freqBigramsFound:
            keys = oldKey.copy()
        else:
            bigramUpdate()

    bigramUpdate()
    while freqBigramsUnfound:
        improveBigram(freqBigramsUnfound.pop())
    g = open("newKey.txt", "w")
    g.write(alphabet + "\n")
    for i in alphabet:
        g.write(keys[i])
    g.close()
    encrypt(input, output, "newKey.txt")
 def save(self):
     file = open(os.getcwd() + "/prop.prp", "w+")
     file.write(encryptor.encrypt(str(self.silenceMode)) + "\n")
     file.write(encryptor.encrypt(self.address) + "\n")
     file.write(encryptor.encrypt(str(self.size) + "\n"))
     file.close()
Beispiel #28
0
    if (mode == '1'):
    #encrypt message
        print("\033[1;31m\nDon't use accent!!\033[m")
        
        message = input('Digit your message: ').strip().lower()   
        key = encryptor.setKey()
        save_in_text = input('Save in archive?[S/N] ').strip().lower()
        
        if 's' in save_in_text:
            save_in_text = 's'
            
        else:
            save_in_text = 'n'
            
        encryptor.encrypt(message, key, save_in_text)
        
        next = input ('Press enter >>> ')
    
    elif mode == '2':
    #descript message
        message = input('Input the message to descript: ').strip().lower()
        key = encryptor.setKey()
        save_in_text = input('Save in archive?[S/N] ').strip().lower()
        
        if 's' in save_in_text:
            save_in_text = 's'
            
        else:
            save_in_text = 'n'