示例#1
0
def run_merkle_hellman():
    action = get_action()

    print("* Seed *")
    seed = input("Set Seed [enter for random]: ")
    import random
    if not seed:
        random.seed()
    else:
        random.seed(seed)

    print("* Building private key...")

    private_key = generate_private_key()
    public_key = create_public_key(private_key)

    if action == 'E':  # Encrypt
        data = get_input(binary=True)
        print("* Transform *")
        chunks = encrypt_mh(data, public_key)
        output = ' '.join(map(str, chunks))
    else:  # Decrypt
        data = get_input(binary=False)
        chunks = [int(line.strip()) for line in data.split() if line.strip()]
        print("* Transform *")
        output = decrypt_mh(chunks, private_key)

    set_output(output)
示例#2
0
    def testMessaging(self):
        self.message = 'hello'

        encrypted_message = crypto.encrypt_mh(self.message, self.PUBLIC_KEY)
        decrypted_message = crypto.decrypt_mh(encrypted_message,
                                              self.PRIVATE_KEY)

        self.assertEqual(self.message, decrypted_message)
示例#3
0
def communicate_with_client(clientId):
    clientPubKey = getPublicKeyOfUser(clientId)
    s = sendHello(clientId, clientPubKey)
    halfSecret = crypto.generate_random_secret()
    sendHalfSecret(s, halfSecret, clientPubKey)
    print('Sending halfSecret', halfSecret)

    # Getting the other half of the secret
    mess = recieve(s)
    mess = deserializeStringList(mess)
    secretPartTwo = crypto.decrypt_mh(mess, PRIVATE_KEY)
    print('Got the other half secret', secretPartTwo)

    # generate_common_secret, init deck
    common_secret = crypto.generate_common_secret(halfSecret, secretPartTwo)
    print('Generated the common secret', common_secret)
    deck = crypto.init_deck(common_secret)
    print('Inited deck with common secret, inited deck:', deck)
    base_deck = deck.copy()

    # communicating with the other one
    myoffset = 0
    messageFromOther = ''

    while (messageFromOther != 'bye'):
        # Message to the other
        message = input('Message to ' + str(clientId) + ": ")
        encr_message, deck, myoffset = crypto.encrypt_message_solitaire(
            message, deck, myoffset)
        mess = str.encode(str(myoffset - len(message)) + ':' + encr_message)
        s.send(mess)

        # Response message
        print('Encrypted message from ' + str(clientId))
        messageFromOther = recieve(s).split(':')
        offset = int(messageFromOther[0])
        encMess = messageFromOther[1]
        concreteMessage, deck, myoffset = crypto.decrypt_message_solitaire(
            encMess, deck, base_deck, offset, myoffset)

        print('Message From ' + str(clientId) + ": " + concreteMessage)

        messageFromOther = concreteMessage

        if messageFromOther == 'bye' and message != 'bye':
            message = 'bye'
            encr_message, deck, myoffset = crypto.encrypt_message_solitaire(
                message, deck, myoffset)
            mess = str.encode(
                str(myoffset - len(message)) + ':' + encr_message)
            s.send(mess)
示例#4
0
def sendHello(clientId, clientPubKey):
    print(" Sending hello to user", clientId, ", with Public key",
          clientPubKey)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((TCP_IP, clientId))
    mess = crypto.encrypt_mh('Hello from ' + str(PRIVATE_TCP_PORT),
                             clientPubKey)
    mess = str.encode(str(mess))
    s.send(mess)
    mess = recieve(s)
    mess = deserializeStringList(mess)
    mess = crypto.decrypt_mh(mess, PRIVATE_KEY)
    print("mess", mess)
    return s
示例#5
0
def testKnapsackMessage():
    print("1---KNAPSACK TEST FOR MESSAGE ENCRYPTION---")
    pk1 = Knapsack.generate_private_key()
    pubkey1 = Knapsack.create_public_key(pk1)

    pk2 = Knapsack.generate_private_key()
    pubkey2 = Knapsack.create_public_key(pk2)

    str1 = "Volt egyszer egy Elek ugy hivtak hogy Teszt Elek aki szerette a teszt eseteket"
    print("Message that will be encrypted=" + str1)

    encripteduzenet = Knapsack.encrypt_mh(str1, pubkey2)
    print("Encrypted message=" + str(encripteduzenet))
    decriptaltuzenet = Knapsack.decrypt_mh(encripteduzenet, pk2)
    print("Decrypted message= " + str(decriptaltuzenet))
    print("-----------------------------------------------\n")
示例#6
0
def testKnapsackDeck():
    print("2---KNAPSACK TEST FOR DECK ENCRYPTION---")
    pk1 = Knapsack.generate_private_key()
    pubkey1 = Knapsack.create_public_key(pk1)

    pk2 = Knapsack.generate_private_key()
    pubkey2 = Knapsack.create_public_key(pk2)

    str1 = ' '.join(
        str(e) for e in [
            4, 19, 24, 18, 21, 25, 26, 5, 6, 20, 2, 23, 12, 17, 13, 27, 16, 8,
            10, 14, 1, 22, 7, 11, 9, 15, 3
        ])

    print("Message that will be encrypted=" + str([
        4, 19, 24, 18, 21, 25, 26, 5, 6, 20, 2, 23, 12, 17, 13, 27, 16, 8, 10,
        14, 1, 22, 7, 11, 9, 15, 3
    ]))
    encripteduzenet = Knapsack.encrypt_mh(str1, pubkey2)
    print("Encrypted message=" + str(encripteduzenet))
    decriptaltuzenet = Knapsack.decrypt_mh(encripteduzenet, pk2)
    print("Decrypted message= " + str(decriptaltuzenet))
    print("-----------------------------------------------\n")
def run_merkle_hellman(encrypting, data):
    """Run the Merkle-Hellman knapsack cryptosystem."""
    action = get_action()

    print("* Seed *")
    seed = input("Set Seed [enter for random]: ")
    if not seed:
        random.seed()
    else:
        random.seed(seed)

    print("* Building private key...")

    private_key = generate_private_key()
    public_key = create_public_key(private_key)

    if encrypting:  # Encrypt
        print("* Transform *")
        chunks = encrypt_mh(data, public_key)
        return ' '.join(map(str, chunks))
    else:  # Decrypt
        chunks = [int(line.strip()) for line in data.split() if line.strip()]
        print("* Transform *")
        return decrypt_mh(chunks, private_key)
示例#8
0
def listening_for_communication():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((TCP_IP, PRIVATE_TCP_PORT))
        s.listen(1)

        conn, addr = s.accept()
        mess = recieve_as_server(conn)
        mess = deserializeStringList(mess)

        mess = crypto.decrypt_mh(mess, PRIVATE_KEY)
        print("mess", mess)
        clientId = 0

        if mess.split(' ')[0] == "Hello":
            clientId = int(mess.split(' ')[2])

        clientPubKey = getPublicKeyOfUser(clientId)

        mess = crypto.encrypt_mh('Hello from ' + str(PRIVATE_TCP_PORT),
                                 clientPubKey)
        mess = str.encode(str(mess))
        conn.send(mess)

        # Generate random secret, getting secret from the other party
        halfSecret = crypto.generate_random_secret()
        mess = recieve_as_server(conn)
        mess = deserializeStringList(mess)
        secretPartOne = crypto.decrypt_mh(mess, PRIVATE_KEY)
        print('Got halfSecret', secretPartOne)

        # Sending the other part of the secret to the other one
        print('Sending halfSecret', halfSecret)
        mess = crypto.encrypt_mh(halfSecret, clientPubKey)
        mess = str.encode(str(mess))
        conn.send(mess)

        # generate_common_secret, init deck
        common_secret = crypto.generate_common_secret(secretPartOne,
                                                      halfSecret)
        print('Generated the common secret', common_secret)
        deck = crypto.init_deck(common_secret)
        print('Inited deck with common secret, inited deck:', deck)
        base_deck = deck.copy()

        # communicating with the other one
        myoffset = 0
        messageFromOther = ''

        while (messageFromOther != 'bye'):

            # Response message
            print('Encrypted message from ' + str(clientId))
            messageFromOther = recieve_as_server(conn).split(':')
            offset = int(messageFromOther[0])
            encMess = messageFromOther[1]
            concreteMessage, deck, myoffset = crypto.decrypt_message_solitaire(
                encMess, deck, base_deck, offset, myoffset)

            print('Message From ' + str(clientId) + ": " + concreteMessage)

            messageFromOther = concreteMessage

            if concreteMessage == 'bye':
                message = 'bye'
                encr_message, deck, myoffset = crypto.encrypt_message_solitaire(
                    message, deck, myoffset)
                mess = str.encode(
                    str(myoffset - len(message)) + ':' + encr_message)
                conn.send(mess)
                break

            # Message to the other
            message = input('Message to ' + str(clientId) + ": ")
            encr_message, deck, myoffset = crypto.encrypt_message_solitaire(
                message, deck, myoffset)
            mess = str.encode(
                str(myoffset - len(message)) + ':' + encr_message)
            conn.send(mess)

            if message == 'bye':
                print('Encrypted message from ' + str(clientId))
                messageFromOther = recieve_as_server(conn).split(':')
                offset = int(messageFromOther[0])
                encMess = messageFromOther[1]
                concreteMessage, deck, myoffset = crypto.decrypt_message_solitaire(
                    encMess, deck, base_deck, offset, myoffset)
                if concreteMessage == 'bye':
                    messageFromOther = concreteMessage
                    break

    except Exception as e:
        print(e)
 def decrypthelper(self, messageToDecrypt):
     print("Encrypted message= "+messageToDecrypt)
     convertToList = json.loads(messageToDecrypt)
     recievedMsg = Knapsack.decrypt_mh(convertToList, self.clientPrivateKey)
     return recievedMsg