9. Mit Powershell Zufallarrays erzeugen und neue Erstellung in Textverschlüsselung
Einleitung
Im ersten Teil geht es um Powershell und im zweiten Teil sehen sie
dann, warum ich unbedingt Zufallarrays brauchte und deren Herstellung
nicht ewig dauern darf: mit Powershell können Sie diese Aufgaben
entgegen der Batch schnell und effektiver erledigen.
Jahrelang improvisierte ich mit der CMD, erschuf gedachte Arrays mit
For-Befehlen und diversen Textdokumenten, weil Batches eben keine
Arrays kennen....
Ich fange wie immer mit dem Quellcode des Powerscript irgendeinName.ps1 an. Dazu gebe ich ein extra Textdokument ein, dass 76 Zeilen Text hat. Das heißt alpha.txt und muss auch so heißen, wie es gleich ersichtlich wird:
$fileName = "alpha.txt"
$fileContent = get-content $fileName
$ergebnis= get-random -input $fileContent -count 76
$fileContentzw = get-content $fileName
$ergebniszw= get-random -input $fileContentzw -count 76
$fileContentdr = get-content $fileName
$ergebnisdr= get-random -input $fileContentdr -count 76
$fileContentvr = get-content $fileName
$ergebnisvr= get-random -input $fileContentvr -count 76
$fileContentfnf = get-content $fileName
$ergebnisfnf= get-random -input $fileContentfnf -count 76
$fileContentsex = get-content $fileName
$ergebnissex= get-random -input $fileContentsex -count 76
$fileContentsbn = get-content $fileName
$ergebnissbn= get-random -input $fileContentsbn -count 76
$fileContentach = get-content $fileName
$ergebnisach= get-random -input $fileContentach -count 76
$fileContentnen = get-content $fileName
$ergebnisnen= get-random -input $fileContentnen -count 76
$fileContentzn = get-content $fileName
$ergebniszn= get-random -input $fileContentzn -count 76
$fileContentelf = get-content $fileName
$ergebniself= get-random -input $fileContentelf -count 76
$fileContentwlf = get-content $fileName
$ergebniswlf= get-random -input $fileContentwlf -count 76
$fileContentdrz = get-content $fileName
$ergebnisdrz= get-random -input $fileContentdrz -count 76
$fileContentvz = get-content $fileName
$ergebnisvz= get-random -input $fileContentvz -count 76
for ($i=0; $i -le 75; $i++) {
$algebnis= $ergebnis[$i] +" " +
$ergebniszw[$i] +" " + $ergebnisdr[$i] +" " + $ergebnisvr[$i] +" " +
$ergebnisfnf[$i] +" " + $ergebnissex[$i] +" " + $ergebnissbn[$i]+" " +
$ergebnisach[$i] +" " + $ergebnisnen[$i]+" " + $ergebniszn[$i] +" " +
$ergebniself[$i] +" " + $ergebniswlf[$i] +" " + $ergebnisdrz[$i]+" " +
$ergebnisvz[$i]
echo $algebnis >>genial.txt
}
und dann noch das Dokument alpha.txt, welches durch copy und paste schnell erstellt ist:
A
w
n
+
4
asr
p
U
-
B
6
Z
j
Leerz
b
V
s
C
gl
M
T
R
pkt
3
r
z
m
D
W
P
9
Fragez
E
\"
x
Q
)
7
F
S
K
f
kma
5
g
H
h
I
q
y
t
i
J
X
prg
L
G
a
dp
c
k
l
1
d
N
8
/
O
(
o
Y
u
0
e
2
v
Es geht Natürlich darum, Ihnen etwas zu demonstrieren: Ich will die
Zeichen: §, :, Komma, Fragezeichen, Leerzeichen und Ausrufezeichen auch
in den Araays haben, aber wenn Sie einmal Das Paragraphenzeichen (§)
mit verwenden, dann gibt es Chaos...
So, jetzt einmal als Vorausschau:
Dieses ist nach dem Einlesen durch die Powershell mit Get Content ein Array mit 76 Zeilen: Ja, gtanz ohne zusätzliche Befehle: Jede Zeile ist Teil eines Arrays! ....
Erklärung:
$fileName = "alpha.txt"
Mit nur einer Zeile selektieren wir einen Text mit 76 Zeilen mit je
einen Buchstaben oder fakultativ drei Buchstaben in einer Variable.
Wichtig: Die Datei muss im selben Verzeichnis wie das Powerscript
liegen, so erspart man sich einen Pfad.
$fileContent = get-content $fileName
$ergebnis= get-random -input $fileContent -count 76
Die nächsten beiden Zeilen sind auf der Meta-Ebene eine Sinneinheit: Der Inhalt von alpha.txt wird nun also Zeile für Zeile mit dem get-content Befehl ausgelesen.
An diesem Punkt geschieht das Wunder: Jede Zeile ist ganz ohne Separator (Trenner) ein Array.
In der Variable Ergebnis stehen also die 76 Zeilen vom Input und jetzt mache ich etwas gemeines:
Ich hole mir 76 Zufallszahlen in das Array, die nun auf den Input vom
File Content angewendet werden, womit jetzt die Zeilennummerierung von
0-75 gemeint ist!
Powershell fängt wie Javascript oder VB-Script an in Arrays bei Null zu
zählen: Dennoch muss ich bei Count eine 76 eintragen, weil Count von 1
- 76 zählt:
So ist garantiert, dass jeder Buchstabe in einer Zeile nach dem Zufallsprinzip der Powershell eine neue Nummer bekommt.
Im Ergebnis stehen jetzt also Zeilen mit einer Nummer und wenn ich nach
der Syntax nun wissen will, was für ein Buchstabe in welcher Zeile ist,
dann sieht das ungefähr so aus:$ergebnis[0]= ?.
Warum Fragezeichen? Weil ich nicht weiß, was in dem Array stand und
nach jedem neuen Start des Scripts steht da eine andere Nummer, weil
dann natürlich ein anderer Bchstabe gewählt wurde!
Damit wäre die Abhandlung dann auch beinahe Fertig, wenn da nicht noch zwei kleine Probleme wären:
1: Ich will mehrere Arrays schaffen!
2: Ich will bei der Ausgabe die Arrays alle nebeneinander haben, also quasi als Tabelle mit einem Leerzeichen als Separator:
Den kann ich mit der vorgestellten Technik frei wählen. Deshalb sollten
sich Menschen, die eine Tabelle mit Powershell erstellen wollen, diese
Abhandlung genau anschauen.
1: Hier ist die Lösung kurz und schmerzlos. Ich nehme immer wieder dieselbe Tabellenreihe von alpha.txt als Grundlage und verändere die Variablennamen leicht:
$fileContentzw = get-content $fileName
$ergebniszw= get-random -input $fileContentzw -count 76
Die Variable Ergebnis und der FileContent
für diese Variable müssen geändert werden, weil ich ja nicht will, dass
sich der Inhalt der Variable und des Contentes sich ändern oder gar
überschrieben werden:
Ich brauche wie gesagt 14 unterschiedliche Arrays, in denen sich dieselbe Anzahl von Zeilen befindet.
Das wiederhole ich insgesamt vierzehn Mal....
2: Jetzt wird es ein wenig schwerer, aber die Erklärung ist ganz einfach:
for ($i=0; $i -le 75; $i++) {
$algebnis= $ergebnis[$i] +" " +
$ergebniszw[$i] +" " + $ergebnisdr[$i] +" " + $ergebnisvr[$i] +" " +
$ergebnisfnf[$i] +" " + $ergebnissex[$i] +" " + $ergebnissbn[$i]+" " +
$ergebnisach[$i] +" " + $ergebnisnen[$i]+" " + $ergebniszn[$i] +" " +
$ergebniself[$i] +" " + $ergebniswlf[$i] +" " + $ergebnisdrz[$i]+" " +
$ergebnisvz[$i]
echo $algebnis >>genial.txt
}
Die Abfrage der Werte eines Arrays kann man innerhalb einer
For-Schleife machen: Die Einleitung bestimmt nun die die Variable
$i=0, die um einen Zähler 1($i++) bis 75 durchzählt und so 76 Mal durchlaufen wird (fängt bei Null an...).
Zwischen den geschweiften Klammern steht dann die Aufgabe:
Ich schaffe also eine vollkommen neue Variable Namens: $algebnis.
Dann greife ich auf das Array zurück und mit $ergebnis[$i] gebe ich beim ersten Durchlauf die erste Zeile vom Ergebnis aus, dass ja bekanntlich in der Zeile $ergebnis[0] einen
ganz anderen Buchstaben hat. Beim ersten Durchlauf ist in den eckigen
Klammern eine 0, beim zweiten eine 1 und beim letzten durchlauf
eine...75 - richtig, es sind 76 Buchstaben und Powershell fängt bei 0
zu Zählen an.
In der ersten Zeile schreibe ich also die erste Zeile von allen Arrays in eine Zeile und mit +" "
erzeuge ich ein Leerzeichen bzw. einen Separator: Da könnte nun auch
ein anderer Separator wie Doppelpunkt, Komma oder Semikolon stehen:
Das ist wichtig, wenn Sie einmal irgendeine CSV mit Separatoren erstellen wollen.
Wie auch immer, nach jeder Runde wird eine weitere Zeile ausgelesen und durch die Zeile echo $algebnis >>genial.txt
das in einem Textdokument ausgegeben, deshalb brauche Ich zwei
Ausgabezeichen, damit Zeile für Zeile angefügt und nicht überschrieben
wird - wer die CMD kennt, ist klar im Vorteil...
Es wurden eine Menge Fragen in diesem Text beantwortet und wer das
übertragen kann, dem steht nun eine leichte Bearbeitung mit Tabellen
nichts mehr im Wege:
Das o. a. Schema ist übertragbar: Lesen sie doch mehrere Tabellen ein und fügen Sie zusammen:
Einfach verschiedene Dokumente einlesen und den Content ziehen, dann
eine For-Schleife nach o. a. Schema erstellen und Zeile für Zeile
auslesen.
Ach ja, Powershell kennt auch object.length, welches ihnen die Länge bzw. Zeilen des Arrays vorgibt.
Die meisten Menschen wissen gar nicht, dass ein Array nicht nur von
links nach rechts geht, sondern eben auch in Powershell von oben nach
unten oder sollte ich sagen: Jede Reihe ist ein Array, genau wie jede
Zeile ein Array sein kann:
Ich zeigte Ihnen ein Array in Reihen, auch wenn ich von Zeilen sprach - jede Zeile ist schließlich ein Teil einer Reihe -:)
Wer nur eindimensional denkt, ist klar im Nachteil: Tabellen sind
zweidimensinal und Ki-Tabellen wären dreidimensional: die gibt es so
leider nicht - vielleicht erkläre ich das Mal...
------
Auswirkungen auf mein Textverschlüsselungsprogrammm
Ich kreierte ein Programm zur Textverschlüsselung, welches eine
HTML-Seite mit Javascript erstellt, die eigenständig auf jedem
Betriebssystem im Browser läuft, egal ob Smartphone, Netbook oder
Computer:
Die Generierung dies HTML-Seite erfordert: Batch, VBS und nun auch
Powershell: Die Skripte sind in der Batch und werden automatisch
erstellt, ausgeführt und vernichtet.
Am Ende steht die individuelle HTML-Seite, die unabhängig arbeitet.
Download, Sha256 Text: c885f64c07bdf6fe251510da510dc1c363331abe6945b72cbf73a382a4c40d12, demo einer fertigen generierten Webseite
Dieselbe Verschlüsselung zur Versendung von E-Mails bis 500 Zeichen oder SMS, Demo einer fertig generierten Webseite
Download, Sha256: e1d27c9815e1a1f6b071a073548907d2be91decd866d75d34bb2e7719a6a5e2d
Verschlüsselung Für kleine Dateien so um die 30 kb (reicht für ein 10 seitiges PDF oder Zip allemal),
Download
Eine Beschreibung finden Sie hier. Ist alles kostenlos und ungefährlich: Ich gehöre zur guten Freewarebewegung.
Für die Erstellung der HTML-Seite brauche ich u. a. 39 Tabellen mit den
o. a. Buchstaben. Die Erstellung mit Batch dauert um zwei Stunden: Ein
kopieren der fertigen individuellen Webseite mit Copy und Paste einen
Bruchteil einer Sekunde.
Ein Großteil der Zeit wurde eben mit der Erstellung der o. a. Tabellen
vertrödelt: Mit Powershell ist das hingegen eine Sekundensache und es
funktioniert. Damit ist die Erstellung nur noch unter einer 15 Minuten mit diesen Versionen - da
ist noch Luft nach unten...
Laden sie sich die Generatorbatch einfach herunter und erstellen sie
eine Seite: Kopieren sie dann diese Seite und versenden Sie an beliebig
viele Empfänger. Über eine Ein-Klick-Encodierung verschlüsseln sie
einen Text mit einem neuartigen Caesar-Verfahren, Tabellen und über
einen beliebig langen Verschlüsselungstext.
Ich arbeite seit mehreren Jahren an der Verschlüsselung. Ach ja, die
Backupfunktion wurde ersatzlos gestrichen, aber mit Copy und Paste
können sie eh so viel Kopien erstellen, wie Sie wollen...
Impressum