» 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 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, 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
C Programm um csv Datei zu erstellen/ Werte mittels Permutation angeben
Hallo Zusammen, ich möchte gerne ein C-Programm erstellen, welches eine csv Datei erstellt. Die csv Datei soll zum testen vier Spalten haben. Zudem soll eine entsprechende Permutation der Werte stattfinden. Habe schon was erstellt- aber mir wird nicht...
[C]von 01110111
0
673
28.09.2017, 14:40
01110111
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
167
21.07.2012, 13:11
Roneck
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
17
955
19.09.2016, 12:15
SCHNAUF
[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
780
27.07.2015, 20:59
kevin2310
unter xp eine lan verbindung herstellen ! wie
So meine platte ist abgeraucht und ich hab mir ne neue gekauft. Hatte nur XP und ich seh es einfach nicht ein 130 tacken für ne WIN10 Lizens abzublatzen.ich hab die auch garnicht... Jetzt stehe ich vor dem problem, dass ich keine LAN verbindung...
von Der Joe
10
516
28.09.2017, 00:17
mgutt
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.270
10.05.2007, 19:15
ICEMAN159
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
335
09.09.2015, 14:49
corallus28
Mssql_connect () Kann keine Verbindung zum Server mit dem Remotehost vom PHP-Hosting her herstellen
Ich habe Arbeit mssql Anschlusscodes und sie arbeiten in meinem anderen Unternehmen PHP-Host aber nicht funktionieren, wenn ich neue Host bewegt. Alle Codes gleichen Ich weiß nicht, warum die Verbindung von neuen Host? In neuen Host mit cpanel und php...
[PHP]von jhienxle
0
612
07.11.2016, 08:00
jhienxle
NSR 50 Daten
Moin, ich hätte gerne mal einigen Daten der Honda also ich meine Dinge wie, Reserve? wieviel Lieter? alle...
von Mavbeatz
1
546
27.09.2009, 17:22
Hypomatic
MAP Daten
Ich bin auf dem Thema noch nicht so fit, daher auch meine Frage. Sind die MAP Daten der D16Y7 DK identisch mit der der D16Y8 DK? Hab die Vermuntung das mein MAP Sensor kaputt ist und habe noch einen vom D16Y7 da...
von Asimo1980
0
253
10.07.2013, 18:05
Asimo1980
© 2004 - 2026 www.programmierer-forum.de | Communities | Impressum |