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
























 
Impressum
Datenschutz