» Zahlenreihen für Kombinatorik, Permutation und Daten-Verschlüsselung einfach herstellen

Informationen aus Webseite herausfilternNeuen Thread eröffnenNeue Antwort erstellenKleine Liste der ASCII-Zeichen
AutorNachricht
Junior 
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 55
Chats: 24
Wohnort: Die Stadt war einmal Bischhofsitz der Oberpfalz....
16.09.2015, 15:44
zitieren

Zahlenreihen richtig permutieren


Wer hat sich nicht schon mal einen Zufallszahlengenerator programmiert, vielleicht für die
Ausgabe von Lottozahlen? Folgende Funktion generiert Zufallszahlen von 1 bis 32767.


int initrandom = 0;
//generiert Zufallszahlen von 0 bis 32767;
int getrand (int lowerlimit, int toprange)
{
// bis 32767
//srand (time (NULL));
if (initrandom == 0)
{
srand (time (NULL));
initrandom = 1;
}
return (rand () % toprange) + lowerlimit;
}

Aber das ist nur die halbe Wahrheit, vielmehr müssen wir beim durcheinanderwirbeln von Zahlenreihen ähnlich vorgehen wie beim
deutschen Samstagslotto, 6 aus 49. Nehmen wir an, wir wollen folgende einfache
Zahlenreihe von 0 bis 7 permutieren, etwa zu Verschlüsselungszwecken von Bytes:

Reihe vor dem 1ten Arbeitsgang:
a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; a[4] = 4; a[5] = 5; a[6] = 6; a[7] = 7;

Würden wir nun einfach so acht Zahlen generieren, dann wäre es durchaus möglich, das eine
Zahl mehrere Male vorkommt. Das würde unser Vorhaben, ein Byte zu verschlüsseln von vorn
herein zum Scheitern bringen. Wir legen in einer Variable die Anzahl der zu generierenden
Zahlen ab:

int untergrenze = 0, obergrenze = 7];

Die Variable obergrenze ist 7, da Array a von 0 bis 7 reicht, also 8 Zahlen.

Wie bei unserem Vorbild am Samstagslotto holen wird aus dem Lottozahlengenerator eine
Zahl nach der anderen ab, wobei der restliche Haufen an Kugeln immer kleiner wird und bringen
diese 8 Zahlen dann in ein neues Array

Nun werden wir in einer Schleifenanweisung eine Zahl aus dem Array holen und das andere Array b damit füllen:

Die Arrays nach dem 1ten Arbeitsgang:
Zufallszahl = 5;
obergrenze = 6;

a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; a[4] = 4; a[5] = 6; a[6] = 7; a[7] = 0;
b[0] = 5;



Die Arrays nach dem 2ten Arbeitsgang:
Zufallszahl = 2;
obergrenze = 5;

a[0] = 0; a[1] = 1; a[2] = 3; a[3] = 4; a[4] = 6; a[5] = 7; a[6] = 0; a[7] = 0;
b[0] = 5; b[1] = 2;

Die Arrays nach dem 3ten Arbeitsgang:
Zufallszahl = 5;
obergrenze = 4;

a[0] = 0; a[1] = 1; a[2] = 3; a[3] = 4; a[4] = 6; a[5] = 0; a[6] = 0; a[7] = 0;
b[0] = 5; b[1] = 2; b[2] = 7;

Die Arrays nach dem 4ten Arbeitsgang:
Zufallszahl = 3;
obergrenze = 3;

a[0] = 0; a[1] = 1; a[2] = 3; a[3] = 6; a[4] = 0; a[5] = 0; a[6] = 0; a[7] = 0;
b[0] = 5; b[1] = 2; b[2] = 7; b[3] = 3;

Bei der zuletzt übrige gebliebenen Zahl diese einfach hinten ans Array b anhängen und fertig.




Nun das Prinzip der Erstellung einer Permutation
Nehmen wir einmal an, wir wollten die Zahlen 0 bis 9 durcheinanderwirbeln. Eine genauere Anleitung möchte ich hier nicht geben.

Werte: 0,1,2,3,4,5,6,7,8,9

1. Zuerst müssen wir ein Array mit 10 Elementen deklarieren, und dann ein Array für die permutierte Zahlenreihe, und für den Schlüssel:
int array[10], gecodet[10], keycode[10];

2. Danach müssen wir den Elementen in den Arrays mit Werten füllen:
for (a = 0; a <= 9; a++)
array[a] = a;
3. Es folgt ein Erstellen der Reihenfolge, wie die Werte in "array" aufgestellt werden sollen:
2,4,5,8,9,0,1,6,3,7

Jene Werte werden nun in das Array keycode[10]
eingelesen:
keycode[0] = 2;
keycode[1] = 4;
keycode[2] = 5;
keycode[3] = 8;
keycode[4] = 9;
keycode[5] = 0;
keycode[6] = 1;
keycode[7] = 6;
keycode[8] = 3;
keycode[9] = 7;
also: int keycode = { 2,4,5,8,9,0,1,6,3,7 } ;
Aus array[0] wird dann gecodet[2] durch die Funktion
ungecodet: 0,1,2,3,4,5,6,7,8,9
Schlüsselreihe: 2,4,5,8,9,0,1,6,3,7
gecodet: 2,4,5,8,9,0,1,6,3,7
for (a = 0; a <= 9; a++)
gecodet[a] = array[ keycode [a] ]; /* array = uncodierte Bytes */
 
Entschlüsselt wird mit:
for (a = 0; a <= 9; a++)
array[ keycode[a] ] = gecodet[a];
Womit die Reihe wieder entschlüsselt wird. Dabei muss beachtet werden das in
der Schlüsselreihe jede Zahl nur einmal vorkommen darf. Hier gibt es folgendes zu
beachten, das es nicht ausreicht mit einem
Zufallszahlengenerator einfach Zahlen zu erzeugen und zu warten, bis man eine neue Reihenfolge hat.
Denn je länger eine solche Permutation ist, desto länger dauert das.
Ich hatte damals aber eine Möglichkeit gefunden die Zeit so zu verkürzen, das dies kein
Problem darstellt. Die technische Grenze zur Erzeugung solcher Permutationen liegt
bei 16384 Bits. Bei meinen Versuchen habe ich im DOS-Modus
eine Zahlenreihe mit 65536 Elementen erzeugen können. Das ganze habe ich, kurz vor
meinen schweren Arbeitsunfall mal schon in einem Programm namens Talarius
verarbeiten können, welches ich hier schon einmal vorstellte. Nicht auf Byte-Ebene, sondern
auf Bitebene arbeitet dieses Programm bei einer Verschlüsselungstiefe von 16384 Bits.
Rein theoretisch könnte man sagen, es sei wie das einer Reihe von Äpfeln und Birnen.
Ob b1, a1, b2, a2 oder b2,a2,b1,a1 sei egal, aber beim nächsten Satz
der zu verschüsselnden Bitreihe kann das schon anders aussehen.
Da ich mir damals erstens keinen Compiler für Windows leisten konnte und ich nach dem
Unfall zu einer Umschulung verdonnert wurde, legte ich mein Programmiererhobby deswegen
aufs Eis. In der Umschulung kam dann ein Verkehrsunfall dazu, bei dem ich als Fußgänger
von hinten durch einen PKW erfasst wurde dazu. Die Folgen waren ein Felsenbeinbruch,
irgendwas noch mit Otobasal, dazu wurde eines meiner Gleichgewichtsorgane zerstört und
mein linkes Gehör ist jetzt weg. Jetzt liegt mein Wortverständnis selbst mit Hörgerät nur bei
50 Prozent. Da ich jetzt mit über 50 arbeitslos wurde (angeblich betriebsbedingt), kann ich
ja wieder ein bisserl rumprobieren. Außerdem bin ich auf Linux umgestiegen, Windows ist
mir viel zu neugierig und auf die Dauer viel zu teuer für mich als Arbeitsloser.
Dazu kommt, das meiner Meinung nach Suse Linux 13.2 für Leute die behindert sind, ich
habe durch die Arbeitsunfälle auch noch zwei kaputte Hände, besser geeignet ist zum Arbeiten
als Windows. Vielleicht sehen andere das anders aber je nach dem. Kein Mensch ist eben wie
der andere.

So long, euer
Guiseppe


pn
Gast 
16.09.2015, 15:44
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Zahlenreihen für Kombinatorik, Permutation und Daten-Verschlüsselung einfach herstellen" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Fahrwerk und Rad/Reifenkombination - Hersteller und Daten -
Nochmal ein Hallo an alle, ich habe schon etliche Threads gelesen, aber mir diese Info's teilweise zu wenig waren, rufe ich mal diesen ins Leben. Da viele nicht wissen, ich eingeschlossen, wie tief unser Del Sol werden soll und wie dies optisch...
von derNob
3
233
13.04.2014, 08:17
derNob
Pflanzerde herstellen
Vielen Dank für euer Forum. Ich habe mich gerade angemeldet, gezielt, weil ich die Übernahme eines landwirtschaftlichen Betriebes in der Ukraine plane. Im Land gibt es meines Wissens keine fertige Pflanzerde und man ist auch bei der Fertigung einer...
von dieter49
14
727
19.04.2016, 21:18
Kichat
PS3 Internetverbindung herstellen
Mahlzeit =), Also ich hab mir gestern ne PS3 gekauft und wollte direkt mit CODMW3 Online durchstarten und hab in den Interneteinstellungen nichts gefunden irgendwie, also sprich wenn ich auf "Internet Einstellungen" gehe und auf "...
von Roneck
0
100
21.07.2012, 13:11
Roneck
Eigene Nummernschildhalter herstellen lassen?
Hi, hat einer Ahnung wo man sich eigene Nummernschildhalter machen lassen kann? Jeder Autohändler hat ja nen eigenen Kennzeichenhalter. Ich will aber einen, den keiner hat. Also einen den nur ich habe :D Von Würth gibt's die Dinger. Aber bei wem...
von Mattes
8
2.080
10.05.2007, 19:15
ICEMAN159
[DIY] Rückleuchtendichtungen EJ/EK selber herstellen
Hallo Maxrev :D Da ihr sicherlich auch das Problem habt, dass sich eurem Kofferraum nach nem Regeschauer in ein Planschbecken verwandelt, liegt das entweder daran, dass die Ausgleichsklappen oder Rückleuchtendichtungen undicht sind! Zum letzteren möchte...
von EJ9_Driver
2
230
27.07.2015, 20:59
kevin2310
AGA herstellen lassen oder lieber aftermarket?
Hallo zusammen, ich bin aktuell am überlegen, was günstiger wäre, eine AGA für meinen EG2 anfertigen lassen, oder eine schon fertige kaufen. Anfertigen lassen hat natürlich einige Vorteile, wie Individuelles Design, Mitbestimmung bei Klang, etc. und...
von Coplord
3
181
09.09.2015, 14:49
corallus28
Infoseite: Technische Daten und Leistungswerte
Hi zusammen, hab grad ne sehr gute Seite entdeckt. Zu sehen gibts Technische Daten und Leistungswerte aktueller Fahrzeuge die man so im Straßenverkehr antrifft von VW Lupo 1.4 TDI bis hin zu Porsche 911 Turbo (997) Man kann auch...
von EG_XXX
6
407
09.04.2010, 17:49
Bomberpilot
Download Prospekt und Preisliste mit Daten
Download Prospekt und Preisliste mit...
von hfg
1
188
17.09.2015, 11:21
hfg
Accord Aero Deck EX - technische Daten und Bremsen
Hallo zusammen, Ich bin neu hier, und hab gleich einige Fragen zu einem Accord Aero Deck EX. Ich hab das Auto auf einer Versteigerung (nicht Ebay ) ersteigert , aber mir fehlen sämtliche Daten und Papiere zu diesem Auto.Was auch nicht besonders...
von Eric F
12
1.187
04.05.2006, 14:50
sparky-spike
technische Daten zu EP3 UND FN2 Nockenwelle
Hallo Leute, Suche alle technische Daten zu den Serien-Nockenwellen EP3 und FN2, Sowie Daten zu den EU- Kolben sowie Japan-Kolben aus dem...
von Martin87
6
335
19.05.2015, 20:11
Martin87
© 2004 - 2016 www.programmierer-forum.de | Communities | Impressum |