Bij deze eindopdracht moesten we een beveiligd chat systeem maken met verschillende beveiligingssystemen.
Hieronder staan als eerst de link naar het verslag. Daarna staat er per fase de code met daarbij een video en af en toe een screenshot. De code is alleen van de ontvanger (vanaf fase 4 is het twee-weg chat, dus hetzelfde als verzender), de video's zijn met alle drie de rollen en de foto's zijn alleen van de onderschepper.
Verslag (PDF)from microbit import *
import radio
radio.on()
radio.config(group=102)
bericht = ""
while True:
msg = radio.receive()
if msg:
if msg == "END":
radio.send("OK")
print(bericht)
display.scroll(bericht)
bericht = ""
else:
# Ontvangen tekst omzetten naar getal
getal = int(msg)
# Getal omzetten naar letter
letter = chr(getal)
bericht = bericht + letter
display.show(".")
from microbit import *
import radio
radio.on()
radio.config(group=102)
bericht = ""
key = 4
while True:
msg = radio.receive()
if button_b.was_pressed():
if key == 25:
key = 0
display.scroll(key)
else:
key += 1
display.scroll(key)
if msg:
if msg == "END":
radio.send("OK")
print(bericht)
display.scroll(bericht)
bericht = ""
if key == 25:
key = 0
else:
key += 1
else:
# Ontvangen tekst omzetten naar getal
getal = int(msg) - key
# Getal omzetten naar letter
letter = chr(getal)
bericht = bericht + letter
display.show(".")
from microbit import *
import radio
radio.on()
radio.config(group=102)
bericht = ""
key = 4
bit = "A"
otherbit = "B"
while True:
msg = radio.receive()
if button_b.was_pressed():
if key == 25:
key = 0
display.scroll(key)
else:
key += 1
display.scroll(key)
if button_a.was_pressed():
bericht = ""
bericht = input("Wat wil je verzenden? ")
print("Je hebt verstuurd: ", bericht)
display.show(Image.ARROW_N)
for letter in bericht:
# Stuur het getal als tekst
radio.send(bit + str(ord(letter) + key))
sleep(100)
# Stuur het getal als tekst
radio.send(bit + "END")
bericht = ""
start = running_time()
timeout = 10000
key = key + 1
if key == 26:
key = 0
print("Key: ", key)
while True:
msg = radio.receive()
if msg:
if msg == otherbit + "OK":
# Bericht is compleet! Laat zien.
display.show(Image.YES)
else:
display.show(Image.NO)
break
if running_time() - start > timeout:
display.show(Image.NO)
break
if msg and msg.startswith(otherbit):
if msg == otherbit + "END":
radio.send(bit + "OK")
print("Je hebt ontvangen: ", bericht)
display.show(Image.YES)
bericht = ""
if key == 25:
key = 0
else:
key += 1
print("Key: ", key)
else:
inhoud = msg[1:]
if inhoud.isdigit():
getal = int(inhoud) - key
letter = chr(getal)
bericht = bericht + letter
display.show(".")
from microbit import *
import radio
radio.on()
radio.config(group=102)
bericht = ""
default_key = 4
keys = {}
bit = "A"
while True:
msg = radio.receive()
if button_a.was_pressed():
bericht = ""
otherbit = ""
otherbit = input("Naar welke bit wil je verzenden? ")
if otherbit not in keys:
keys[otherbit] = default_key
bericht = input("Wat wil je verzenden? ")
print("Je hebt naar " + otherbit + " verstuurd: ", bericht)
key = keys[otherbit]
display.show(Image.ARROW_N)
for letter in bericht:
# Stuur het getal als tekst
radio.send(otherbit + str(ord(letter) + key) + bit)
sleep(100)
# Stuur het getal als tekst
radio.send(otherbit + "END" + bit)
bericht = ""
start = running_time()
timeout = 10000
keys[otherbit] += 1
if keys[otherbit] == 26:
keys[otherbit] = 0
print("Key for " + otherbit + " : " + str(keys[otherbit]))
while True:
msg = radio.receive()
if msg:
if msg == otherbit + "OK":
# Bericht is compleet! Laat zien.
display.show(Image.YES)
else:
display.show(Image.NO)
break
if running_time() - start > timeout:
display.show(Image.NO)
break
if msg and msg.startswith(bit):
if msg.startswith(bit + "END"):
radio.send(bit + "OK")
print("Je hebt van " + msg[msg.find("END") + 3] + " ontvangen: ", bericht)
sender = msg[msg.find("END") + 3]
if sender not in keys:
keys[sender] = default_key
display.show(Image.YES)
bericht = ""
keys[sender] += 1
if keys[sender] == 26:
keys[sender] = 0
print("Key for " + sender + ": ", keys[sender])
else:
inhoud = msg[1:-1]
if inhoud.isdigit():
sender = msg[-1]
if sender not in keys:
keys[sender] = default_key
getal = int(inhoud) - keys[sender]
letter = chr(getal)
bericht = bericht + letter
display.show(".")
from microbit import *
import radio
radio.on()
radio.config(group=102)
bericht = ""
default_key = 4
keys = {}
bit = "A"
retries = 0
failed = 0
succeeded = 0
while True:
msg = radio.receive()
if button_a.was_pressed():
retries = 0
bericht = ""
otherbit = ""
otherbit = input("Naar welke bit wil je verzenden? ")
if otherbit not in keys:
keys[otherbit] = default_key
bericht = input("Wat wil je verzenden? ")
print("Je hebt naar " + otherbit + " verstuurd: ", bericht)
key = keys[otherbit]
display.show(Image.ARROW_N)
while retries < 5:
for letter in bericht:
radio.send(otherbit + str(ord(letter) + key) + bit)
sleep(100)
radio.send(otherbit + "END" + bit)
start = running_time()
timeout = 10000
while True:
msg = radio.receive()
if msg:
if msg == otherbit + "OK":
display.show(Image.YES)
retries = 5
keys[otherbit] += 1
if keys[otherbit] == 26:
keys[otherbit] = 0
print("Key for " + otherbit + " : " + str(keys[otherbit]))
bericht = ""
succeeded += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
else:
retries += 1
print("Wrong ACK, retry:", retries)
if retries >= 5:
display.show(Image.NO)
print("ACK timeout")
bericht = ""
failed += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
else:
display.show(Image.ARROW_N)
break
if running_time() - start > timeout:
retries += 1
print("Timeout, retry:", retries)
if retries >= 5:
display.show(Image.NO)
print("ACK timeout")
bericht = ""
failed += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
else:
display.show(Image.ARROW_N)
break
if msg and msg.startswith(bit):
if msg.startswith(bit + "END"):
radio.send(bit + "OK")
print("Je hebt van " + msg[msg.find("END") + 3] + " ontvangen: ", bericht)
sender = msg[msg.find("END") + 3]
if sender not in keys:
keys[sender] = default_key
display.show(Image.YES)
bericht = ""
keys[sender] += 1
if keys[sender] == 26:
keys[sender] = 0
print("Key for " + sender + ": ", keys[sender])
else:
inhoud = msg[1:-1]
if inhoud.isdigit():
sender = msg[-1]
if sender not in keys:
keys[sender] = default_key
getal = int(inhoud) - keys[sender]
letter = chr(getal)
bericht = bericht + letter
display.show(".")
De key per letter verhogen in plaats van per bericht, hierdoor zal bijvoorbeeld de E niet meerdere keren met hetzelfde getal voorkomen.
from microbit import *
import radio
import random
radio.on()
radio.config(group=102)
bericht = ""
berichtf = ""
default_key = 4
keys = {}
bit = "A"
retries = 0
failed = 0
succeeded = 0
lettercount = 0
berichtlock = False
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 '
while True:
msg = radio.receive()
if button_a.was_pressed():
retries = 0
bericht = ""
berichtf = ""
lettercount = 0
otherbit = ""
otherbit = input("Naar welke bit wil je verzenden? ")
if otherbit not in keys:
keys[otherbit] = default_key
bericht = input("Wat wil je verzenden? ")
lengte = len(bericht)
if lengte > 100:
print("Lengte bericht meer dan 100, dus afgeknipt bij 100 tekens.")
bericht = bericht[:100]
print("Je hebt naar " + otherbit + " verstuurd: ", bericht)
key = keys[otherbit]
display.show(Image.ARROW_N)
while retries < 5:
lettercount = 0
for letter in bericht:
radio.send(otherbit + str(ord(letter) + key) + bit)
lettercount += 1
sleep(100)
radio.send(otherbit + str(3 + key) + bit)
lettercount += 1
sleep(100)
lettercountrev = 100 - lettercount
while lettercountrev > 0:
radio.send(otherbit + str(ord(random.choice(letters)) + key) + bit)
lettercountrev -= 1
sleep(50)
radio.send(otherbit + "END" + bit)
start = running_time()
timeout = 15000
while True:
msg = radio.receive()
if msg:
if msg == otherbit + "OK":
display.show(Image.YES)
retries = 5
keys[otherbit] += 1
if keys[otherbit] == 26:
keys[otherbit] = 0
print("Key for " + otherbit + " : " + str(keys[otherbit]))
bericht = ""
berichtf = ""
succeeded += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
print("")
else:
retries += 1
print("Wrong ACK, retry:", retries)
if retries >= 5:
display.show(Image.NO)
print("ACK timeout")
bericht = ""
berichtf = ""
failed += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
print("")
else:
display.show(Image.ARROW_N)
break
if running_time() - start > timeout:
retries += 1
print("Timeout, retry:", retries)
if retries >= 5:
display.show(Image.NO)
print("ACK timeout")
bericht = ""
berichtf = ""
failed += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
print("")
else:
display.show(Image.ARROW_N)
break
if msg and msg.startswith(bit):
if msg.startswith(bit + "END"):
berichtlock = False
radio.send(bit + "OK")
print("Je hebt van " + msg[msg.find("END") + 3] + " ontvangen: ", bericht)
print("Je hebt van " + msg[msg.find("END") + 3] + " volledig ontvangen: ", berichtf)
sender = msg[msg.find("END") + 3]
if sender not in keys:
keys[sender] = default_key
display.show(Image.YES)
bericht = ""
berichtf = ""
keys[sender] += 1
if keys[sender] == 26:
keys[sender] = 0
print("Key for " + sender + ": ", keys[sender])
print("")
else:
inhoud = msg[1:-1]
if inhoud.isdigit():
sender = msg[-1]
if sender not in keys:
keys[sender] = default_key
getal = int(inhoud) - keys[sender]
if getal == 3:
berichtlock = True
letter = chr(getal)
if berichtlock == True:
bericht = bericht
berichtf = berichtf + letter
else:
bericht = bericht + letter
berichtf = berichtf + letter
display.show(".")
from microbit import *
import radio
import random
radio.on()
radio.config(group=102)
bericht = ""
berichtf = ""
default_key = 4
keys = {}
bit = "A"
retries = 0
failed = 0
succeeded = 0
lettercount = 0
berichtlock = False
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 '
while True:
msg = radio.receive()
if button_a.was_pressed():
retries = 0
bericht = ""
berichtf = ""
lettercount = 0
otherbit = ""
otherbit = input("Naar welke bit wil je verzenden? ")
if otherbit not in keys:
keys[otherbit] = default_key
if input("Wil je 'tekst' of 'foto' versturen?") == "tekst":
bericht = input("Wat wil je verzenden? ")
else:
print("Kies een foto om te versturen.")
print("1: Hart")
print("2: Klein hart")
print("3: Gelukkig")
print("4: Lach")
print("5: Zielig")
print("6: Verward")
print("7: Boos")
print("8: Slapend")
print("9: Verrast")
print("10: Gek")
print("11: Geweldig")
print("12: Ja")
print("13: Nee")
print("14: Meh")
print("15: Eend")
print("16: Giraffe")
print("17: Pacman")
print("18: Geest")
print("19: Schedel")
nummer = input("Welke foto wil je versturen? ")
while not nummer.isdigit():
print("Geef alleen het nummer.")
nummer = input("Welke foto wil je versturen? ")
nummer = int(nummer)
bericht = "ifedvkm:"
if nummer == 1:
bericht = bericht + "HEART"
elif nummer == 2:
bericht = bericht + "HEART_SMALL"
elif nummer == 3:
bericht = bericht + "HAPPY"
elif nummer == 4:
bericht = bericht + "SMILE"
elif nummer == 5:
bericht = bericht + "SAD"
elif nummer == 6:
bericht = bericht + "CONFUSED"
elif nummer == 7:
bericht = bericht + "ANGRY"
elif nummer == 8:
bericht = bericht + "ASLEEP"
elif nummer == 9:
bericht = bericht + "SURPRISED"
elif nummer == 10:
bericht = bericht + "SILLY"
elif nummer == 11:
bericht = bericht + "FABULOUS"
elif nummer == 12:
bericht = bericht + "YES"
elif nummer == 13:
bericht = bericht + "NO"
elif nummer == 14:
bericht = bericht + "MEH"
elif nummer == 15:
bericht = bericht + "DUCK"
elif nummer == 16:
bericht = bericht + "GIRAFFE"
elif nummer == 17:
bericht = bericht + "PACMAN"
elif nummer == 18:
bericht = bericht + "GHOST"
elif nummer == 19:
bericht = bericht + "SKULL"
print("dit is het bericht: " + bericht)
lengte = len(bericht)
if lengte > 100:
print("Lengte bericht meer dan 100, dus afgeknipt bij 100 tekens.")
bericht = bericht[:100]
print("Je hebt naar " + otherbit + " verstuurd: ", bericht)
key = keys[otherbit]
display.show(Image.ARROW_N)
while retries < 5:
lettercount = 0
for letter in bericht:
radio.send(otherbit + str(ord(letter) + key) + bit)
lettercount += 1
sleep(100)
radio.send(otherbit + str(3 + key) + bit)
lettercount += 1
sleep(100)
lettercountrev = 100 - lettercount
while lettercountrev > 0:
radio.send(otherbit + str(ord(random.choice(letters)) + key) + bit)
lettercountrev -= 1
sleep(50)
radio.send(otherbit + "END" + bit)
start = running_time()
timeout = 15000
while True:
msg = radio.receive()
if msg:
if msg == otherbit + "OK":
display.show(Image.YES)
retries = 5
keys[otherbit] += 1
if keys[otherbit] == 26:
keys[otherbit] = 0
print("Key for " + otherbit + " : " + str(keys[otherbit]))
bericht = ""
berichtf = ""
succeeded += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
print("")
else:
retries += 1
print("Wrong ACK, retry:", retries)
if retries >= 5:
display.show(Image.NO)
print("ACK timeout")
bericht = ""
berichtf = ""
failed += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
print("")
else:
display.show(Image.ARROW_N)
break
if running_time() - start > timeout:
retries += 1
print("Timeout, retry:", retries)
if retries >= 5:
display.show(Image.NO)
print("ACK timeout")
bericht = ""
berichtf = ""
failed += 1
print("Stats:")
print("Berichten gelukt: ", succeeded)
print("Berichten mislukt: ", failed)
print("")
else:
display.show(Image.ARROW_N)
break
if msg and msg.startswith(bit):
if msg.startswith(bit + "END"):
berichtlock = False
radio.send(bit + "OK")
if bericht.startswith("ifedvkm:"):
foto = bericht.split(":")[1]
plaatje = getattr(Image, foto)
display.show(plaatje)
print("Je hebt een foto ontvangen van " + msg[msg.find("END") + 3])
sleep(1000)
else:
print("Je hebt van " + msg[msg.find("END") + 3] + " ontvangen: ", bericht)
print("Je hebt van " + msg[msg.find("END") + 3] + " volledig ontvangen: ", berichtf)
display.show(Image.YES)
sender = msg[msg.find("END") + 3]
if sender not in keys:
keys[sender] = default_key
bericht = ""
berichtf = ""
keys[sender] += 1
if keys[sender] == 26:
keys[sender] = 0
print("Key for " + sender + ": ", keys[sender])
print("")
else:
inhoud = msg[1:-1]
if inhoud.isdigit():
sender = msg[-1]
if sender not in keys:
keys[sender] = default_key
getal = int(inhoud) - keys[sender]
if getal == 3:
berichtlock = True
letter = chr(getal)
if berichtlock == True:
bericht = bericht
berichtf = berichtf + letter
else:
bericht = bericht + letter
berichtf = berichtf + letter
display.show(".")