E n t w i c k l u n g e i n e s s i c h e r e n V i d e o ü b e r t r a g u n g s s y s t e m s. F e i n e n t w u r f



Ähnliche Dokumente
Softwareentwicklungspraktikum Sommersemester Feinentwurf

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Handbuch SyCOM Administration

Kurzanleitung SEPPmail

Bedienungsanleitung. Matthias Haasler. Version 0.4. für die Arbeit mit der Gemeinde-Homepage der Paulus-Kirchengemeinde Tempelhof

Die Dateiablage Der Weg zur Dateiablage

Der große VideoClip- Wettbewerb von Media Markt.

Bedienungsanleitung für den SecureCourier

Ein Hinweis vorab: Mailkonfiguration am Beispiel von Thunderbird

Benutzeranleitung Superadmin Tool

KURZANLEITUNG CLOUD OBJECT STORAGE

Anleitung Thunderbird Verschlu sselung

PeDaS Personal Data Safe. - Bedienungsanleitung -

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

-Verschlüsselung mit S/MIME

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

How to install freesshd

Thunderbird Portable + GPG/Enigmail

TeamSpeak3 Einrichten

1 Überblick. A-Z SiteReader Benachrichtigung.doc Seite 1 von 9

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Anleitung für den Euroweb-Newsletter

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

O UTLOOK EDITION. Was ist die Outlook Edition? Installieren der Outlook Edition. Siehe auch:

Einleitung: Frontend Backend

Anleitungen zum Publizieren Ihrer Homepage

OP-LOG

Leitfaden zur Nutzung von binder CryptShare

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis 1

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Hochschulrechenzentrum. chschulrechenzentrum #96. Freie Universität Berlin

So richten Sie Ihr Postfach im Mail-Programm Apple Mail ein:

Benutzerverwaltung mit Zugriffsrechteverwaltung (optional)

Aufklappelemente anlegen

Handbuch für Nutzer von Zertifikaten der Zertifizierungsstellen (CAs) des Bayerischen Behördennetzes (BYBN) zur Sicherung von s Teil D7:

Anleitung für die Registrierung und das Einstellen von Angeboten

Anwendungsbeispiele Buchhaltung

Online-Prüfungs-ABC. ABC Vertriebsberatung GmbH Bahnhofstraße Neckargemünd

Benutzerverwaltung Business- & Company-Paket

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Tutorial -

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

" -Adresse": Geben Sie hier bitte die vorher eingerichtete Adresse ein.

FastViewer Remote Edition 2.X

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Verschlüsseln Sie Ihre Dateien lückenlos Verwenden Sie TrueCrypt, um Ihre Daten zu schützen.

Anleitung für das Content Management System

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing.

Zugriff auf das Across-Ticketsystem

Anleitung zur Installation von Thunderbird

NTT DATA Helpdesk Benutzerhandbuch

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

HANDBUCH FILEZILLA So benutzen Sie Ihren kostenlosen FTP Client.

Objektorientierte Programmierung

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

Systemausgabe des Capture Pro Software FTP-Servers

Kleines Handbuch zur Fotogalerie der Pixel AG

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Step by Step Webserver unter Windows Server von Christian Bartl

Streamserver24.com. Anleitung Auto-DJ

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: :: WINTERSEMESTER 08 09

Multicast Security Group Key Management Architecture (MSEC GKMArch)

Sparkasse Vogtland. Secure Datensicherheit im Internet. Kundenleitfaden. Sparkasse Vogtland. Kundeninformation Secure 1

RGS Homepage Arbeiten im Administratorbereich (Backend)

Hilfedatei der Oden$-Börse Stand Juni 2014

Grafstat Checkliste Internetbefragung

SharePoint Demonstration

ecaros2 - Accountmanager

Handbuch Synology-Server Einrichten / Firewall

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

GeoPilot (Android) die App

Um über FTP Dateien auf Ihren Public Space Server - Zugang laden zu können benötigen Sie folgende Angaben:

Anleitung OpenCms 8 Webformular Auswertung

Bedienungsanleitung. FarmPilot-Uploader

ÖKB Steiermark Schulungsunterlagen

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Kurzanleitung GigaMove

- Frontend

Benutzerhandbuch - Elterliche Kontrolle

Alarmbilder von Bildquellen per empfangen

Anleitung Datenfernsicherung SecureSafe

So nutzen Sie die HiDrive App mit Ihrem Android Smartphone

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Anleitungen zum KMG- -Konto

VIDA ADMIN KURZANLEITUNG

Apartment App. Web Style Guide

Anmeldung bei einem registrierten Konto (Account)

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

NetStream Helpdesk-Online. Verwalten und erstellen Sie Ihre eigenen Tickets

How to do? Projekte - Zeiterfassung

SMS4OL Administrationshandbuch

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

inviu routes Installation und Erstellung einer ENAiKOON id

Diese Anleitung wurde erstellt von Niclas Lüchau und Daniel Scherer. Erste Anmeldung. Schritt 1: Anmeldung..2. Schritt 2: Passwort setzen 3

Konfiguration der Yeastar MyPBX IP-Telefonanlagen mit iway Business SIP Trunk

Transkript:

E n t w i c k l u n g e i n e s s i c h e r e n V i d e o ü b e r t r a g u n g s s y s t e m s Softwareentwicklungspraktikum Sommersemester 2009 The Security Gurus [Gruppe ] Phasenverantwortlicher Justus Hummelsheim F e i n e n t w u r f Auftraggeber Technische Universität Braunschweig Institut für Betriebssysteme und Rechnerverbund Prof. Dr.-Ing Lars Wolf Mühlenpfordtstraße 23,. OG 3806 Braunschweig Betreuer: Kai Homeier, Jens Brandt, Timo Veit Name Johannes Bürdek Daniel Fischer Justus Hummelsheim Sebastian Nieke Jan-Marc Reinhardt Mengzhi Zhang Auftragnehmer: E - Mail johannes.buerdek@gmx.net d.fischer@tu-bs.de netzjoe@arcor.de waronfate@googlemail.com j-m.reinhardt@tu-bs.de ias47@hotmail.com Braunschweig, 08.05.2009

Versionsübersicht Version Datum Autor Status Kommentar.0 08.05.09 Gruppe Erstfassung 2.0 3.05.09 Gruppe überarbeitete Version 2

I n h a l t s v e r z e i c h n i s ENTWICKLUNG EINES SICHEREN VIDEOÜBERTRAGUNGSSYSTEMS... FEINENTWURF... INHALTSVERZEICHNIS... 3 ABBILDUNGSVERZEICHNIS... 5 EINLEITUNG... 6 2 ERFÜLLUNG DER KRITERIEN... 6 2. MUSSKRITERIEN... 6 2.2 WUNSCHKRITERIEN... 8 2.3 ABGRENZUNGSKRITERIEN... 9 3 IMPLEMENTIERUNGSENTWURF... 6 3. GESAMTSYSTEM...0 3.2 IMPLEMENTIERUNG DER KOMPONENTE PLAYER...0 3.2. KLASSENDIAGRAMM...2 3.2.2 ERLÄUTERUNG...3 3.3 IMPLEMENTIERUNG DER KOMPONENTE UPLOADER...6 3.3. KLASSENDIAGRAMM...7 3.3.2 ERLÄUTERUNG...8 3.4 IMPLEMENTIERUNG DER KOMPONENTE SERVERRECEIVER...2 3.4. KLASSENDIAGRAMM...22 3.4.2 ERLÄUTERUNG...23 3.5 IMPLEMENTIERUNG DER KOMPONENTE STREAMSERVER...26 3.5. KLASSENDIAGRAMM...27 3.5.2 ERLÄUTERUNG...28 3.6 IMPLEMENTIERUNG DER KOMPONENTE GUI...3 3.6. KLASSENDIAGRAMM...32 3.6.2 ERLÄUTERUNG...33 3.7 IMPLEMENTIERUNG DER KOMPONENTE DATENBANK...36 3.7. KLASSENDIAGRAMM...36 3

3.7.2 ERLÄUTERUNG...37 4 DATENMODELL...42 4. DIAGRAMM...42 4.2 ERLÄUTERUNG...42

A b b i l d u n g s v e r z e i c h n i s Diagramm 3-: Komponentendiagramm... 0 Diagramm 3-2: Klassendiagramm Player... 3 Diagramm 3-3: Klassendiagramm Uploader... 7 Diagramm 3-4: Klassendiagramm ServerReceiver... Diagramm 3-5: Klassendiagramm StreamServer... 27 Diagramm 3-6: Klassendiagramm GUI... 32 Diagramm 3-7: Klassendiagramm Datenbank... 36 Diagramm 3-8: Klassendiagramm Ver- und Entschlüsselung... 40 Diagramm 4-: Klassendiagramm Datenmodell...42

Einleitung Das vorliegende Dokument beschreibt die Implementierungsdetails für das Softwareprojekt Entwicklung eines sicheren Videoübertragungssystems In Kapitel 2 wird auf die praktische Umsetzung der im Pflichtenheft festgehaltenen Muss-, Wunsch- und Abgrenzungskriterien eingegangen. Kapitel 3 behandelt die im Grobentwurf ermittelten Komponenten und beschreibt ihre Beziehungen untereinander mit Hilfe von Klassendiagrammen. Im abschließenden, vierten Kapitel wird das verwendete Datenmodell erläutert. 2 Erfüllung der Kriterien Im Folgenden wird die Umsetzung der Kriterien konkretisiert. 2. Musskriterien 2.. /M0/ Speichern von verschlüsselten Videos auf dem Server Der Server soll in der Lage sein verschlüsselte Videos zu speichern. Zusätzlich dazu soll er Informationen wie den Uploader, den Zeitpunkt und Laufzeit vermerken. Zudem ist jedem Video ein Schlüssel zugeordnet der ebenfalls gespeichert werden muss. 2..2 /M20/ Streamen von Videos vom Server Der Server soll auf Anforderung hin in der Lage sein, verschlüsselte Videos zu einem Client zu streamen. 2..3 /M30/ Bereitstellung einer Datenbank zur Benutzerverwaltung durch den Server Um Informationen über Nutzer zu speichern, soll der Server eine entsprechende Datenbank zur Verfügung stellen. Diese enthält Nutzerdaten wie den Namen, das Passwort, eine E-Mail Adresse und Verweise auf Videos des Nutzers. Zusätzlich verwaltet die Datenbank die Rechte der User. 2..4 /M40/ Authentifizierung der Benutzer durch den Server Fordert ein Client Zugriff auf die Datenbank oder die Videos des Servers, so muss ein entsprechendes Formular ausgefüllt werden. Der Server gleicht die gemachten Angaben dann mit der Datenbank ab und gewährt oder verweigert den Zugriff.

2..5 /M50/ Bereitstellung von Interfaces zur Benutzerverwaltung durch den Server Der Server muss über entsprechende Interfaces Zugriff auf die Benutzerverwaltung gewähren. 2..6 /M60/ Bereitstellung von Interfaces zum Upload und Ändern bzw. Löschen von Daten durch den Server Der Server muss über entsprechende Interfaces die Möglichkeit geben Videos und Angaben zu den Videos hochzuladen, zu löschen und zu ändern. 2..7 /M70/ Verbinden und authentisieren des Players mit dem Server Der Player muss sich mit dem Server verbinden und authentisieren können. 2..8 /M80/ Entschlüsseln und Abspielen von Videos mit dem Player Der Videoplayer muss die Videos entschlüsseln und abspielen können. 2..9 /M90/ Verbinden und authentisieren des Uploaders mit dem Server Der Uploader muss sich mit dem Server verbinden und authentisieren können. 2..0 /M00/ Verschlüsseln und übermitteln von Videos durch den Uploader zum Server Der Uploader soll in der Lage sein Videos zu verschlüsseln und nach dem Authentisierungsvorgang, diese an den Server zu senden. 2.. /M0/ Löschen von Videos auf dem Server durch den Uploader Der Uploader soll in der Lage sein nach dem Authentisierungsvorgang, dem Server die Anweisung zu geben, Videos auf dem Server zu löschen. 2..2 /M20/ Verbinden und authentisieren der Benutzerverwaltung mit dem Server Die Benutzerverwaltung soll sich mit dem Server verbinden und sich dort authentisieren können.

2..3 /M30/ Ansprechen der Serverinterfaces durch die Benutzerverwaltung Die Benutzerverwaltung muss in der Lage sein die Interfaces des Servers anzusprechen. 2..4 /M40/ Anlegen, verändern und löschen von Benutzern durch die Benutzerverwaltung Die Benutzerverwaltung muss in der Lage sein, neue Benutzer zu erstellen oder aber bereits vorhandene zu ändern bzw. zu löschen. 2..5 /M50/ Rechteverwaltung der Benutzer durch die Benutzerverwaltung Die Benutzerverwaltung muss in der Lage sein die Rechte der Nutzer zu verwalten. 2..6 /M60/ Zurücksetzen, ändern und verschicken der Passwörter durch die Benutzerverwaltung Die Benutzerverwaltung muss in der Lage sein die Passwörter der Nutzer zu ändern, zurückzusetzen und an die Benutzer zu verschicken. 2.2 Wunschkriterien 2.2. /W0/ Speichern von Videos durch den Videoplayer Optional kann der Videoplayer die gestreamten Videos über ein zusätzliches Menü speichern. 2.2.2 /W20/ Durchspulen von Videos mit dem Videoplayer Optional kann der Videoplayer durch ein empfangenes oder gespeichertes Video spulen. Dafür wird die Gesamtlaufzeit benötigt. 2.2.3 /W30/ E-Mail Benachrichtigungen bei neuen Videos durch den Server Optional kann der Server Benachrichtigungen bei neuen Videouploads ausgeben. Dazu wird eine Liste benötigt in die sich berechtigte Nutzer selbst eintragen können.

2.3 Abgrenzungskriterien 2.3. /A0/ Einseitigkeit des Videoplayers Der Player muss nicht alle Standards unterstützen und auch keine lokal vorhandenen Medien abspielen können. Er muss nur mit der angedachten Server-Software zusammen arbeiten können.

3 Implementierungsentwurf 3. Gesamtsystem Diagramm 3-: Komponentendiagramm Erläuterung: Die Komponenten Kamera und Video Player können über die Schnittstelle upload mit der Komponente Server kommunizieren und Videos übertragen. Die Komponenten Uploader und Video Player authentisieren sich über die Schnittstelle userinformation bei der Komponente Server. Die Komponente Server wiederum kann über diese Schnittstelle Änderungen in der Komponente Benutzerverwaltung vornehmen. Über die Schnittstelle download können Videodateien von der Komponente Server zur Komponente Video Player gestreamt werden. Zur genaueren Betrachtung werden die Komponenten aus der Abbildung im Folgenden noch einmal aufgeteilt. 3.2 Implementierung der Komponente Player Der Player besteht hauptsächlich aus der Klasse PlayerReceiver, der über andere Klassen die Verbindungen verwaltet, die Streams ausliest und anzeigt oder speichert. Damit er diese korrekt steuern kann, implementiert der Receiver die drei Schnittstellen javax.media.rtp.sessionlistener, javax.media.rtp.receivestreamlistener und javax.media.controllerlistener,

mit denen er wichtige Events verarbeiten kann. Die Daten des Servers werden in einem Objekt der Klasse Target gespeichert. Um Streams empfangen zu können wird die Klasse javax.media.rtp.rtpmanager benutzt. Diese öffnet und verarbeitet die Streams vom Server. Für die Verarbeitung wird die Klasse DecipherDepacketizer benutzt, welche das Interface javax.media.codec implementiert. Wurde ein Video empfangen und entschlüsselt, kann es entweder über ein Objekt der Klasse javax.media.datasink gespeichert werden, oder mit einem Objekt der Klasse javax.media.player abgespielt werden. Um das Video anzuzeigen kann man mit dem Aufruf der Funktion getvisualcomponent() des Players ein Objekt vom Typ java.awt.component erhalten welches das Video anzeigt. Wenn man die Funktion getcontrolpanelcomponent() des Players aufruft erhält man ein Objekt vom Typ java.awt.component, mit dem sich die Wiedergabe des Videos steuern lässt.

3.2. Klassendiagramm DecipherDepacketizer + PLUGIN_NAME : string + CUSTOM_PCM : string + HDR_SIZE : int + DEFAULT_RATE : int + DEFAULT_SIZE : int + DEFAULT_CHNLS : int - supportedinputformats : javax.media.format[] - supportedoutputformats : javax.media.format[] - invideoformat : javax.media.videocodec - outvideoformat : javax.media.videocodec - key : byte[] - crypto : Crypto + DecipherDepacketizer(key : byte[]) : DecipherDepacketizer + matches(input : Format, supported : Format[]) : bool + open() : void + close() : void + getcontrol(type : string) : Object + getcontrols() : Object[] + getinputformat() : VideoFormat + getoutputformat() : Format + getname() : string + getsupportedinputformats() : Format[] + getsupportedoutputformats() : Format[] + process(inbuf : Buffer, outbuf : Buffer) : int + reset() : void + setinputformat(format : Format) : Format + setoutputformat(format : Format) : Format <<interface>> <<interface>> <<interface>> javax.media.codec javax.media.rtp.sessionlistener javax.media.rtp.receivestreamlistener <<interface>> javax.media.controllerlistener used to receive streams javax.media.rtp.rtpmanager PlayerReceiver + PlayerReceiver(mainProgram : MainProgram, target : Target, key : byte[]) : PlayerReceiver used to decode streams + close() : void + update(evt : ControllerEvent) : void + update(evt : ReceiveStreamEvent) : void + update(evt : SessionEvent) : void infos about server used to save videos used to handle videos Target javax.media.datasink javax.media.player + ip : string + port : int + localport : int + Target(ip : string, port : int, localport : int) : Target Diagramm 3-2: Klassendiagramm Player

Diagramm 3-2: Klassendiagramm Player 3.2.2 Erläuterung Klasse PlayerReceiver PlayerReceiver(mainProgram: MainProgram, target: Target, key: byte[]) close() update(evt: ControllerEvent) update(evt: ReceiveStreamEvent) update(evt: SessionEvent) Konstruktor, der alle Einstellungen vornimmt, den Schlüssel speichert und den Empfang startet schließt den Stream und beendet damit die Verbindung bearbeitet Events vom Player bearbeitet Events die den eingehenden Stream betreffen bearbeitet Events welche die Verbindung im Allgemeinen betreffen und nicht zu den ReceiveStreamEvents gehören - - javax.media.datasink javax.media.player Target javax.media.rtp.rtpmanager MainWin Nein Ja Nein Ja Ja

Klasse Target Target(ip: String, port: int, localport: int) Konstruktor der nur die Daten speichert ip: String port: int localport: int speichert die IP-Adresse des Servers speichert den Port des Servers speichert den Port des lokalen Rechners PlayerReceiver nein Klasse DecipherDepacketizer DecipherDepacketizer(byte[] key) matches(input: Format, supportet: Format[]) open() close() process(inbuf: Buffer, outbuf: Buffer) reset() Konstruktor der den Schlüssel zum entschlüsseln und die unterstützten Eingabeund Ausgabeformate speichert überprüft ob das gegebene Format input in der Liste der (unterstützten) Formate enthalten ist leere Funktion die durch das Interface gefordert wird leere Funktion die durch das Interface gefordert wird verrichtet eigentliche arbeit (aus Paketen zusammensetzen, entschlüsseln, usw.) leere Funktion die durch das Interface gefordert wird

PLUGIN_NAME: String CUSTOM_PCM: String DEFAULT_RATE: int DEFAULT_SIZE: int DEFAULT_CHNLS: int supportedinputformats: Format[] supportedoutputformats: Format[] invideoformat: Format outvideoformat: Format key: byte[] crypto: Crypto speichert den Namen des Plugins speichert einen String zur Identifizierung des Inhalts des Ausgabestreams speichert Standardwerte für die Datenrate des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Datengröße des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Kanalanzahl des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert eine Liste mit gültigen Eingabeformaten speichert eine Liste mit möglichen Ausgabeformaten speichert das ausgewählte Eingabeformat speichert das ausgewählte Ausgabeformat speichert den Schlüssel zum entschlüsseln des Videos wird für die Entschlüsselung benutzt javax.media.rtp.rtpmanager Ja

3.3 Implementierung der Komponente Uploader Der Uploader muss im Gegensatz zum Player kein Interface implementieren. Um das zu streamende Video lesen zu können wird ein Objekt vom Typ javax.media.processor benötigt, welches über eine DataSource über ein MediaLocator initialisiert wird. Wieder in einem Objekt vom Typ Target werden die Daten des anderen Rechners, in diesem Fall des Clients, gespeichert. Zu diesem Client wird mithilfe des javax.media.rtp.rtpmanager s eine Verbindung hergestellt und ein Stream zur Videoübertragung geöffnet. Um das Video zu verpacken und zu verschlüsseln benutzt der RTPManager den CipherPacketizer, welcher das Interface javax.media.codec implementiert. Über den StateListener wird der Status des Processors überwacht und Statusänderungen bekannt gegeben. Hierfür implementiert der StateListener das javax.media.controllerlistener Interface.

3.3. Klassendiagramm <<interface>> javax.media.codec CipherPacketizer + PLUGIN_NAME : string + CUSTOM_PCM : string + HDR_SIZE : int + DEFAULT_RATE : int + DEFAULT_SIZE : int + DEFAULT_CHNLS : int - supportedinputformats : javax.media.format[] - supportedoutputformats : javax.media.format[] - invideoformat : javax.media.videocodec - outvideoformat : javax.media.videocodec - key : byte[] - crypto : Crypto + CipherPacketizer(key : byte[]) : CipherPacketizer + matches(input : Format, supported : Format[]) : bool + open() : void + close() : void + getcontrol(type : string) : Object + getcontrols() : Object[] + getinputformat() : VideoFormat + getoutputformat() : Format + getname() : string + getsupportedinputformats() : Format[] + getsupportedoutputformats() : Format[] + process(inbuf : Buffer, outbuf : Buffer) : int + reset() : void + setinputformat(format : Format) : Format + setoutputformat(format : Format) : Format <<interface>> javax.media.controllerlistener javax.media.processor StateListener + controllerupdate(ce : ControllerEvent) : void uses to process media used to monitor states Uploader - MYPCM_PAYLOAD : int - mypcmformat : Format - failed : bool - locator : javax.media.medialocator + Uploader(locator : MediaLocator, target : Target, format : Format, key : byte[]) : Uploader + start() : string + stop() : void + registercustompayload() : bool + createprocessor() : string + createtransmitter() : string + setfailed() : void + waitforstate(processor : Processor, state : int) : boolean connected with to create streams Target + ip : string uses + port : int + localport : int javax.media.rtp.rtpmanager + Target(ip : string, port : int, localport : int) : Target Diagramm 3-3: Klassendiagramm Uploader

3.3.2 Erläuterung Klasse Uploader Uploader(locator: MediaLocator, target: Target, format: Format, key: byte[]) start() stop() registercustompayload() createprocessor() createtransmitter() setfailed() waitforstate(processor: Processor, state: int) Konstruktor der den Speicherort des Videos und dessen Format, die Daten des Clients und den Schlüssel des Videos speichert beginnt die Übertragung des Videos stoppt eine schon begonnene Übertragung registriert den CipherPacketizer am PlugInManager erstellt einen Processor um das Video zu lesen erstellt einen RTPManager um die Verbindung zum Client herzustellen setzt die Variable failed auf true um anzuzeigen dass etwas schief gegangen ist wartet auf einen gegebenen Status des Processor s MYPCM_PAYLOAD: int mypcmformat: Format failed: bool locator: javax.media.medialocator speichert die ID-Nummer für die Datenart speichert das Format der Daten speichert ob ein Fehler vorliegt speichert den Speicherort des Videos Target javax.media.processor StateListener javax.rtp.rtpmanager UploadWin Nein Ja Ja Ja Nein

Klasse Target Target(ip: String, port: int, localport: int) Konstruktor der nur die Daten speichert ip: String port: int localport: int speichert die IP-Adresse des Servers speichert den Port des Servers speichert den Port des lokalen Rechners Uploader nein Klasse StateListener controllerupdate(ce ControllerEvent) reagiert auf eine Veränderung des Status bei einem Controller, benachrichtigt alle die auf eine Statusänderung warten und setzt die Variable failed falls ein Fehler aufgetreten ist - - Uploader Ja

Klasse CipherPacketizer CipherPacketizer(byte[] key) matches(input: Format, supportet: Format[]) open() close() process(inbuf: Buffer, outbuf: Buffer) reset() Konstruktor der den Schlüssel zum verschlüsseln und die unterstützten Eingabeund Ausgabeformate speichert überprüft ob das gegebene Format input in der Liste der (unterstützten) Formate enthalten ist leere Funktion die durch das Interface gefordert wird leere Funktion die durch das Interface gefordert wird verrichtet eigentliche arbeit (Pakete aufteilen, verschlüsseln, usw.) leere Funktion die durch das Interface gefordert wird PLUGIN_NAME: String CUSTOM_PCM: String DEFAULT_RATE: int DEFAULT_SIZE: int DEFAULT_CHNLS: int supportedinputformats: Format[] supportedoutputformats: Format[] invideoformat: Format speichert den Namen des Plugins speichert einen String zur Identifizierung des Inhalts des Ausgabestreams speichert Standardwerte für die Datenrate des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Datengröße des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Kanalanzahl des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert eine Liste mit gültigen Eingabeformaten speichert eine Liste mit möglichen Ausgabeformaten speichert das ausgewählte Eingabeformat

outvideoformat: Format key: byte[] crypto: Crypto speichert das ausgewählte Ausgabeformat speichert den Schlüssel zum verschlüsseln des Videos wird für die Verschlüsselung benutzt javax.media.rtp.rtpmanager Ja 3.4 Implementierung der Komponente ServerReceiver Der ServerReceiver ist der Teil des FileServer s welcher verschlüsselte oder unverschlüsselte Videos vom Client annimmt, gegebenenfalls verschlüsselt und dann speichert. Der ServerReceiver implementiert die drei Schnittstellen javax.media.rtp.sessionlistener, javax.media.rtp.receivestreamlistener und javax.media.controllerlistener, um auf alle wichtigen Events reagieren zu können. Die Daten des Clients werden in einem Objekt der Klasse Target gespeichert. Um Streams empfangen zu können wird die Klasse javax.media.rtp.rtpmanager benutzt. Diese öffnet und verarbeitet die Streams vom Client. Für die Verarbeitung wird entweder die Klasse CipherDepacketizer (wenn das Video noch nicht verschlüsselt ist) oder die Klasse Depacketizer (wenn es schon verschlüsselt ist) benutzt, welche beide das Interface javax.media.codec implementieren. Wurde ein Video empfangen und gegebenenfalls verschlüsselt, wird es über ein Objekt der Klasse javax.media.datasink gespeichert.

3.4. Klassendiagramm Diagramm 3-4: Klassendiagramm ServerReceiver

3.4.2 Erläuterung Klasse ServerReceiver ServerReceiver(mainProgram: MainProgram, target: Target) close() update(evt: ControllerEvent) update(evt: ReceiveStreamEvent) update(evt: SessionEvent) Konstruktor, der alle Einstellungen vornimmt und den Empfang startet schließt den Stream und beendet damit die Verbindung bearbeitet Events vom DataSink bearbeitet Events die den eingehenden Stream betreffen bearbeitet Events welche die Verbindung im Allgemeinen betreffen und nicht zu den ReceiveStreamEvents gehören - - javax.media.datasink Target javax.media.rtp.rtpmanager MainProgram Nein Nein Ja Nein Klasse Target Target(ip: String, port: int, localport: int) Konstruktor der nur die Daten speichert ip: String port: int localport: int speichert die IP-Adresse des Clients speichert den Port des Clients speichert den Port des lokalen Rechners

ServerReceiver nein Klasse Depacketizer Depacketizer() matches(input: Format, supportet: Format[]) open() close() process(inbuf: Buffer, outbuf: Buffer) reset() Konstruktor der nur die unterstützten Eingabe- und Ausgabeformate speichert überprüft ob das gegebene Format input in der Liste der (unterstützten) Formate enthalten ist leere Funktion die durch das Interface gefordert wird leere Funktion die durch das Interface gefordert wird verrichtet eigentliche arbeit (Pakete aufteilen, verschlüsseln, usw.) leere Funktion die durch das Interface gefordert wird PLUGIN_NAME: String CUSTOM_PCM: String DEFAULT_RATE: int DEFAULT_SIZE: int DEFAULT_CHNLS: int supportedinputformats: Format[] speichert den Namen des Plugins speichert einen String zur Identifizierung des Inhalts des Ausgabestreams speichert Standardwerte für die Datenrate des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Datengröße des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Kanalanzahl des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert eine Liste mit gültigen Eingabeformaten

supportedoutputformats: Format[] invideoformat: Format outvideoformat: Format speichert eine Liste mit möglichen Ausgabeformaten speichert das ausgewählte Eingabeformat speichert das ausgewählte Ausgabeformat javax.media.rtp.rtpmanager Ja Klasse CipherDepacketizer CipherPacketizer(key: byte[]) matches(input: Format, supportet: Format[]) open() close() process(inbuf: Buffer, outbuf: Buffer) reset() Konstruktor der den Schlüssel zum verschlüsseln und die unterstützten Eingabeund Ausgabeformate speichert überprüft ob das gegebene Format input in der Liste der (unterstützten) Formate enthalten ist leere Funktion die durch das Interface gefordert wird leere Funktion die durch das Interface gefordert wird verrichtet eigentliche arbeit (Pakete aufteilen, verschlüsseln, usw.) leere Funktion die durch das Interface gefordert wird PLUGIN_NAME: String CUSTOM_PCM: String DEFAULT_RATE: int DEFAULT_SIZE: int speichert den Namen des Plugins speichert einen String zur Identifizierung des Inhalts des Ausgabestreams speichert Standardwerte für die Datenrate des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Datengröße des Ausgabeformates was wichtig ist, damit

DEFAULT_CHNLS: int supportedinputformats: Format[] supportedoutputformats: Format[] invideoformat: Format outvideoformat: Format key: byte[] crypto: Crypto das Plugin seinen Dienst tun kann speichert Standardwerte für die Kanalanzahl des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert eine Liste mit gültigen Eingabeformaten speichert eine Liste mit möglichen Ausgabeformaten speichert das ausgewählte Eingabeformat speichert das ausgewählte Ausgabeformat speichert den Schlüssel zum verschlüsseln des Videos wird zur Verschlüsselung benutzt javax.media.rtp.rtpmanager Ja 3.5 Implementierung der Komponente StreamServer Der StreamServer streamt verschlüsselte Videos zum Client. Er besteht hauptsächlich aus der Klasse StreamServer, welche die Steuerung der Übertragung übernimmt. Die Daten des Clients werden in einem Objekt der Klasse Target gespeichert. Das Video wird mit einem javax.media.processor von einem javax.media.medialocator gelesen. Dabei werden die verschiedenen Status des Processor s von einem StateListener überwacht, welcher das Interface javax.media.controllerlistener implementiert. Durch ein Objekt der Klasse javax.media.rtp.rtpmanager wird schließlich eine Verbindung zum Client hergestellt. Für die korrekte Verarbeitung des Streams benutzt dieser ein Objekt vom Typ Packetizer, welcher das Interface javax.media.codec implementiert.

3.5. Klassendiagramm <<interface>> javax.media.codec Packetizer + PLUGIN_NAME : string + CUSTOM_PCM : string + HDR_SIZE : int + DEFAULT_RATE : int + DEFAULT_SIZE : int + DEFAULT_CHNLS : int - supportedinputformats : javax.media.format[] - supportedoutputformats : javax.media.format[] - invideoformat : javax.media.videocodec - outvideoformat : javax.media.videocodec + Packetizer() : Packetizer + matches(input : Format, supported : Format[]) : bool + open() : void + close() : void + getcontrol(type : string) : Object + getcontrols() : Object[] + getinputformat() : VideoFormat + getoutputformat() : Format + getname() : string + getsupportedinputformats() : Format[] + getsupportedoutputformats() : Format[] + process(inbuf : Buffer, outbuf : Buffer) : int + reset() : void + setinputformat(format : Format) : Format + setoutputformat(format : Format) : Format <<interface>> javax.media.controllerlistener javax.media.processor StateListener uses to process media + controllerupdate(ce : ControllerEvent) : void uses to monitor states StreamServer - MYPCM_PAYLOAD : int - mypcmformat : Format - failed : bool - locator : javax.media.medialocator + StreamServer(locator : MediaLocator, target : Target, format : Format) : StreamServer + start() : string + stop() : void + registercustompayload() : bool + createprocessor() : string + createtransmitter() : string + setfailed() : void + waitforstate(processor : Processor, state : int) : boolean connected with used to create streams Target + ip : string + port : int + localport : int + Target(ip : string, port : int, localport : int) : Target used to pack data before sending rjavax.media.rtp.rtpmanager Diagramm 3-5: Klassendiagramm StreamServer

3.5.2 Erläuterung Klasse StreamServer StreamServer(locator: MediaLocator, target: Target, format: Format) start() stop() registercustompayload() createprocessor() createtransmitter() setfailed() waitforstate(processor: Processor, state: int) Konstruktor der den Speicherort des Videos, dessen Format und die Daten des Clients speichert beginnt die Übertragung des Videos stoppt eine schon begonnene Übertragung registriert den Packetizer am PlugInManager erstellt einen Processor um das Video zu lesen erstellt einen RTPManager um die Verbindung zum Client herzustellen setzt die Variable failed auf true um anzuzeigen dass etwas schief gegangen ist wartet auf einen gegebenen Status des Processor s MYPCM_PAYLOAD: int mypcmformat: Format failed: bool locator: javax.media.medialocator speichert die ID-Nummer für die Datenart speichert das Format der Daten speichert ob ein Fehler vorliegt speichert den Speicherort des Videos Target javax.media.processor StateListener javax.rtp.rtpmanager Nein Ja Ja Ja

Klasse Target Target(ip: String, port: int, localport: int) Konstruktor der nur die Daten speichert ip: String port: int localport: int speichert die IP-Adresse des Clients speichert den Port des Clients speichert den Port des lokalen Rechners StreamServer nein Klasse StateListener controllerupdate(ce ControllerEvent) reagiert auf eine Veränderung des Status bei einem Controller, benachrichtigt alle die auf eine Statusänderung warten und setzt die Variable failed falls ein Fehler aufgetreten ist - - Uploader Ja Klasse Packetizer

Packetizer() matches(input: Format, supportet: Format[]) open() close() process(inbuf: Buffer, outbuf: Buffer) reset() Konstruktor der die unterstützten Eingabeund Ausgabeformate speichert überprüft ob das gegebene Format input in der Liste der (unterstützten) Formate enthalten ist leere Funktion die durch das Interface gefordert wird leere Funktion die durch das Interface gefordert wird verrichtet eigentliche arbeit (Pakete aufteilen, verschlüsseln, usw.) leere Funktion die durch das Interface gefordert wird PLUGIN_NAME: String CUSTOM_PCM: String DEFAULT_RATE: int DEFAULT_SIZE: int DEFAULT_CHNLS: int supportedinputformats: Format[] supportedoutputformats: Format[] invideoformat: Format outvideoformat: Format speichert den Namen des Plugins speichert einen String zur Identifizierung des Inhalts des Ausgabestreams speichert Standardwerte für die Datenrate des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Datengröße des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert Standardwerte für die Kanalanzahl des Ausgabeformates was wichtig ist, damit das Plugin seinen Dienst tun kann speichert eine Liste mit gültigen Eingabeformaten speichert eine Liste mit möglichen Ausgabeformaten speichert das ausgewählte Eingabeformat speichert das ausgewählte Ausgabeformat javax.media.rtp.rtpmanager Ja

3.6 Implementierung der Komponente GUI Die GUI-Komponente wird aktiviert sobald das Hauptprogramm gestartet wird. Es werden drei Klassen aufgerufen: MainWin (das Hauptfenster), UploadWin (das Uploadfenster) und UserManagementWin (das Benutzerverwaltungsfenster). Beim Starten des Programms wird nur das Hauptfenster angezeigt. Wenn die uploadmenuitemactionperformed(evt: ActionEvent) oder btnvideoaddactionperformed(evt: ActionEvent) aufgerufen wird, ruft diese zuerst die UploadWin auf welche dann das Uploadfenster anzeigt. Wenn die btnuserchangeactionperformed(evt: ActionEvent) aufgerufen wird, wird das Benutzerverwaltungsfenster durch die UserManagementWin angezeigt.

3.6. Klassendiagramm Diagramm 3-6: Klassendiagramm GUI

3.6.2 Erläuterung Klasse MainWin openuploadwin() openusermanagementwin() exitmenuitemactionperformed (evt:actionevent): *ActionPerformed(evt:ActionEvent) setplayerstateactiv() setplayerstateinactiv() Diese öffnet das Fenster UploadWin. Diese öffnet das Fenster UserManagementWin. Diese wird vom ActionListener des Bedienelements exitmenuitem aufgerufen und beendet das Programm. Analog wie oben. Die Buttons und MenuItems werden vom ActionListener der unterschiedlichen Bedienelemente aufgerufen. Setzt den Wert playerstateactiv auf true. Setzt den Wert playerstateactiv auf false. usermanagementwin: UserManagementWin uploadwin: UploadWin playerstateactiv: boolean playerreceiver: PlayerReceiverPanel Eine Instanz von UserManagementWin. Eine Instanz von UploadWin. Ein Boolean-Wert, der im Fall False das Ende des Videos angibt. Der im Hauptfenster eingebettete Videoplayer(PlayerReceiver). UploadWin UserManagementWin PlayerReceiverPanel Nein Nein Ja Klasse UploadWin btnuploadyesactionperformed(evt: ActionEvent) Diese wird vom ActionListener des Bedienelements btnuplaodyes aufgerufen und bestätigt die Hochladen des Videos.

btnuploadcancelactionperformed(evt: ActionEvent) btnuploadopenactionperformed(evt: ActionEvent) setuploadstateactiv() setuploadstateinactiv() Diese wird vom ActionListener des Bedienelements btnuploadcancel aufgerufen und beendet dieses Fenster. Diese wird vom ActionListener des Bedienelements btnuploadopen aufgerufen und öffnet das Verzeichnis auf der lokalen Festplatte. Setzt den Wert uploadstateactiv auf true. Setzt den Wert uploadstateactiv auf false. uploadstateactiv: boolean Ein Boolean-Wert, der im Fall False das Ende des Hochladens eines Videos anzeigt. MainWin Uploader Nein Nein Klasse UserManagementWin createuser(name: String, pw: String, right: int) removeuser() searchuser(name: String) pwreset() Diese erstellt einen neuen Benutzernamen im Array userl. Diese n löscht den Benutzernamen aus dem Array userl. Diese sucht im Array nach Namen und gibt für den Index einen int-wert zurück. Diese setzt das Passwort des ausgewählten Benutzers zurück. userl: String[ ] Ein Array, das alle Benutzernamen speichert. MainWin Nein

Klasse PlayerReceiverPanel getvisualcomponent() getcontrolpanelcomponent() Gibt eine Display-Komponente für den Player zurück. Gibt eine Komponente zurück, die ein standard-user interface für die Kontrolle des Players anbietet. playerreceiver: PlayerReceiver Ein Objekt PlayerReceiver, das als Klasse PlayerReceiver erzeugt wird. MainWin Ja

3.7 Implementierung der Komponente Datenbank Die Komponente Datenbank besteht aus der Klasse DatabaseConnection, die n bereitstellt um auf die Datenbank zuzugreifen und Daten auszulesen, und aus Klassen um eine sichere Übertragung der Daten aus der Datenbank mittels SSL zu gewährleisten. Die Klassen mit denen die Client-Server-Kommunikation über eine sichere SSL-Verbindung erstellt werden kann heißen: SSLServer, SSLConnection und SSLClient. Mit der Klasse SSLServer kann man auf der Serverseite eine Verbindungen vom Client entgegen nehmen und diese wird von der Klasse an ein SSLConnection-Objekt weitergegeben. Die Klasse SSLConnection kommuniziert serverseitig mit dem Client und die Klasse SSLClient dient dazu vom Client aus mit dem Server zu kommunizieren. 3.7. Klassendiagramm - database : string - table : string - connection : Connection DatabaseConnection + connect(database : string, table : string) : void + closeconnection() : void + adduser(data : string[]) : void + edituser(user : string, data : string[]) : void + removeuser(user : string) + changeuserrights(user : string, rights : string[]) : void + changepassword(user : string, password : string) : void + checkpassword(user : string, password : string) : boolean + checkrights(user : string, rights : string[]) : boolean + addgroup(name : string) : void + removegroup(name : string) : void + changegrouprights(name : string, rights : string[]) : void + addusertogroup(user : string, group : string) : void + removeuserfromgroup(user : string, group : string) : void + addvideon(name : string, data : string[]) : void + removevideo(name : string) : void SSLClient - port : int - serveraddress : string - sslsocketfactory : SSLSocketFactory - target : SSLSocket - bufferedreader : BufferedReader - bufferedwriter : BufferedWriter + SSLClient(port : int, serveraddress : string) + getport() : int + getserveraddress() : string + setport(port : int) : void + setserveraddress(serveraddress : string) : void + connect(port : int, serveraddress : string) : void + closeconnection() : void + sendmsg(msg : string) : void + run() : void <<interface>> java.lang.runnable SSLServer - port : int - sslserversocketfactory : SSLServerSocketFactory - sslserversocket : SSLServerSocket - sslsocket : SSLSocket - connections : SSLConnection + SSLServer(port : int) + getport() : int + setport(port : int) : void + removeconnection(connection : SSLConnection) : void + run() : void * SSLConnection - target : SSLSocket - sslserver : SSLServer - bufferedreader : BufferedReader - bufferedwriter : BufferedWriter + SSLConnection(sslServer : SSLServer, target : SSLSocket) + sendmsg(msg : string) : void + run() : void Diagramm 3-7: Klassendiagramm Datenbank

3.7.2 Erläuterung Klasse DatabaseConnection connect(database: string, table: string) Stellt eine Verbindung zu einer Datenbank her. close() Schließt die Verbindung zur Datenbank. adduser(userdata: string[]) Trägt einen Benutzer in die Datenbank ein. edituser(user: string, newuserdata: string[]) Ändert die Daten eines Benutzers. removeuser(user: string) Löscht eine Benutzer aus der Datenbank. changeuserright(user: string, rights: string[]) Ändert die Rechte eines Benutzers. changepassword(user: string, Ändert das Passwort eines Benutzers. password: string) checkpassword(user: string, Überprüft das Passwort eines Benutzers. password: string) checkrights(user: string, rights: string[]) Überprüft, ob der Benutzer bestimmte Rechte hat. addgroup(name: string) Fügt eine neue Gruppe in die Datenbank ein. removegroup(name: string) Löscht eine Gruppe aus der Datenbank. changegrouprights(name: string, Ändert die Rechte einer Gruppe. rights: string[]) addusertogroup(user: string, group: string) Fügt einen Benutzer zu einer Gruppe hinzu. removeuserfromgroup(user: string, Entfernt einen Benutzer aus einer Gruppe. group: string) addvideo(name: string, data: string[] Fügt ein Video in die Datenbank ein. removevideo(name: string) Entfernt ein Video aus der Datenbank. database: string table: string connection: Connection Adresse der Datenbank. Tabelle auf die zugegriffen werden soll. Speichert die Verbindung zur Datenbank. SSLConnection Nein

Klasse SSLServer SSLServer(port: int) removeconnection(connection: SSLConnection) run() Initialisisert das Objekt. Löscht ein SSLConnection-Objekt aus der connections-liste. Wartet auf eingehende Verbindungen und erzeugt SSLConnection-Objekte. port: int Port für eingehende Verbindungen. sslserversocketfactory: Erstellen von SSLServerSockets. SSLServerSocketFactory sslserversocket: SSLServerSocket Annehmen von sicheren SSL- Verbindungsanfragen von Clients. sslsocket: SSLSocket Kommunikation mit einem Client. connections: List<SSLConnection> Speichert die Verbindungen zu den einzelnen Clients. SSLConnection SSLClient Nein Nein Klasse SSLConnection SSLConnection(sslServer: SSLServer, target: SSLSocket) sendmsg(msg: string) run() Konstruktor um ein SSLConnection-Objekt zu erzeugen und zu initialisieren. Sendet eine Nachricht an den Client. Wartet auf Nachrichten vom Client und verarbeitet diese.

traget: SSLSocket sslserver: SSLServer bufferedreader: BufferedReader bufferedwriter: BufferedWriter Verbindung mit einem Client. SSLServer der das Objekt erstellt hat. Empfangen von Nachrichten vom Client. Senden von Nachrichten an den Client. SSLServer SSLClient DatabaseConnection Nein Ja Nein Klasse SSLClient SSLClient (port: int, serveraddress: string) connect (port: int, serveraddress: string) close() sendmsg(msg: string) run() Konstruktor um ein SSLClient-Objekt zu erzeugen und zu initialisieren. Baut Verbindung zu Server auf. Schließt Verbindung zum Server. Sendet eine Nachricht an den Server. Wartet auf Nachrichten vom Server und verarbeitet diese. port: int serveraddress: string sslserversocketfactory: SSLSocketFactory traget: SSLSocket bufferedreader: BufferedReader bufferedwriter: BufferedWriter Port des Zielservers. Adresse des Zielservers. Erstellen von SSLServerSockets. Verbindung mit einem Server. Empfangen von Nachrichten vom Client. Senden von Nachrichten an den Client. SSLConnection Ja

3.8 Implementierung der Komponente Ver- und Entschlüsselung Die Komponente Ver- und Entschlüsselung wird vom Uploader und Server zum Verschlüsseln von Videos und vom Player zum Entschlüsseln von Videos benutzt. Zum Verund Entschlüsseln benutzt die Klasse Crypto die Klasse Cipher. Speziell zum Verschlüsseln wird zunächst ein neues Crypto-Objekt erzeugt. Dabei wird der Konstruktor mit dem Verschlüsselungsalgorithmus aber ohne den Parameter Key aufgerufen. Dadurch wird ein zufälliger Key vom KeyGenerator erzeugt und in dem SecretKeySpec- gehalten. Durch einen Aufruf der encrypt- werden die Videodaten nun paketweise verschlüsselt und die verschlüsselten Daten zurückgegeben. Zum Entschlüsseln wird ebenfalls ein Crypto-Objekt erzeugt, jedoch wird dem Konstruktor nun neben dem Verschlüsselungsalgorithmus auch der passende Key als Parameter übergeben. Auch dieser Key wird dann im SecretKeySpec- gehalten. Durch einen Aufruf der decrypt- werden die übergebenen verschlüsselten Daten entschlüsselt und zurückgegeben. Diagramm 3-8: Klassendiagramm Ver- und Entschlüsselung

3.8. Erläuterung Klasse Crypto Crypto (in algorithm: String) Crypto (in algorithm: String, in key: byte[]) byte[] getkey() byte[] setkey() byte[] encrypt(in dec_data: byte[]) byte[] decrypt(in enc_data: byte[]) Konstruktor um ein Crypto-Objekt zu erzeugen und mit dem Verschlüsselungsalgorithmus zu initialisieren. Konstruktor um ein Crypto-Objekt zu erzeugen und mit dem Verschlüsselungsalgorithmus und einem Key zu initialisieren. Selektor zum Erhalten des Keys Setzt den Key eines Crypto-Objekts Verschlüsselt die unverschlüsselten Daten und gibt sie verschlüsselt zurück Entschlüsselt die verschlüsselten Daten und gibt sie unverschlüsselt zurück cipher: Cipher skeyspec: SecretKeySpec Das Cipher-Objekt zum Ver- und Entschlüsseln der Videodaten Das SecretKeySpec-Objekt, welches den Key zum Ver- und Entschlüsseln hält Cipher Nein

4 Datenmodell 4. Diagramm Diagramm 4-: Klassendiagramm Datenmodell 4.2 Erläuterung In dem Diagramm ist zu sehen, welche Daten in der Datenbank gespeichert werden und wie diese verbunden sind. Zu jedem Benutzer werden gespeichert: der Benutzername (name) das Passwort (password) der Vorname (firstname) der Nachname (lastname) die E-Mail-Adresse (emailaddress) der Zeitpunkt des letzten Anmeldevorgangs (lastlogin) die Anzahl fehlgeschlagener Anmeldeversuche seit der letzten erfolgreichen Anmeldung (failedlogins) einen Zeitpunkt, bis zu dem der Benutzer gesperrt ist (accessdenieduntil)