Cmd - Textverschlüsselung durch eigenes Alphabet
Hi,
ich würde gerne einen Fließtext via cmd verschlüsseln können und stelle mir die Struktur wiefolgt vor:
alphabet.endung
--> Inhalt: a = &%n<
b = )?""§
usw.
Verschlüsselungsdatei.bat
Diese Datei erkennt den Text, verwendet die alphabet.endung und wandelt ihn in einen verschlüsselten Text um.
text.txt
Der zu verschlüsselnde Text
new.txt
der verschlüsselte Text
Nun habe ich grundliegende Probleme bei diesem Projekt.
Zum Einen finde ich keinen Befehl, um den Inhalt einer Datei zu erkennen und zum anderen keinen Befehl um diesen Inhalt auf den Inhalt einer anderen Datei einzusetzen, sprich dass der Text vom Alphabet verschlüsselt wird.
Alternative Sprachen wären bei mir keine Lösung, da ich außer wenigen Websprachen nur in cmd halbwegs bewand bin.
ich würde gerne einen Fließtext via cmd verschlüsseln können und stelle mir die Struktur wiefolgt vor:
alphabet.endung
--> Inhalt: a = &%n<
b = )?""§
usw.
Verschlüsselungsdatei.bat
Diese Datei erkennt den Text, verwendet die alphabet.endung und wandelt ihn in einen verschlüsselten Text um.
text.txt
Der zu verschlüsselnde Text
new.txt
der verschlüsselte Text
Nun habe ich grundliegende Probleme bei diesem Projekt.
Zum Einen finde ich keinen Befehl, um den Inhalt einer Datei zu erkennen und zum anderen keinen Befehl um diesen Inhalt auf den Inhalt einer anderen Datei einzusetzen, sprich dass der Text vom Alphabet verschlüsselt wird.
Alternative Sprachen wären bei mir keine Lösung, da ich außer wenigen Websprachen nur in cmd halbwegs bewand bin.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178294
Url: https://administrator.de/contentid/178294
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
1 Kommentar
Hallo abbrechen,
leider ist die CMD-Batchsprache nur schlecht zum verarbeiten des Inhalts von Textdateien geeignet. Das fängt mit der Zeichencodierung an (CMD arbeitet mit der DOS-Codepage 850, normale Windowsprogramme/-editoren mit der ANSI-Codepage) und hört mit den Schwierigkeiten beim Verarbeiten von Zeichen auf, die zum Sprachumfang von Batchscript gehören (z.B.
Deshalb eine VBScript-Lösung von mir:
Den Code z.B. als
Der Pfad zur Alphabetdatei ist optional. Wenn nicht angegeben, wird im aktuellen Verzeichnis nach einer Datei namens
usw.
Du musst für Groß- und Kleinbuchstaben separate Einträge in der Datei anlegen oder in Zeile 44 die 0 durch eine 1 ersetzen.
Um VBScript zu lernen: Google mal nach
Eine gute Übung wäre, den Decoder selbst zu schreiben . Du musst nur einige wenige Änderungen an obigem Code durchführen.
Noch ein Tipp: Falls Du wirklich die Zeichen aus der Eingabedatei durch mehrere Zeichen in der Ausgabedatei codieren willst, nimm für alle Zeichen eine konstante Anzahl Ersetzungszeichen.
Gruß
Friemler
leider ist die CMD-Batchsprache nur schlecht zum verarbeiten des Inhalts von Textdateien geeignet. Das fängt mit der Zeichencodierung an (CMD arbeitet mit der DOS-Codepage 850, normale Windowsprogramme/-editoren mit der ANSI-Codepage) und hört mit den Schwierigkeiten beim Verarbeiten von Zeichen auf, die zum Sprachumfang von Batchscript gehören (z.B.
%,&,<,>
usw.).Deshalb eine VBScript-Lösung von mir:
'Name der Datei mit dem Codierungsalphabet
strStdAlphabetFile = "Alphabet.txt"
'Konstanten für File-I/O
Const ForReading = 1
Const ForWriting = 2
'Wurden Parameter übergeben?
If WScript.Arguments.Count > 0 Then
'FileSystemObject erzeugen
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Name der zu verschlüsselnden Datei aus dem ersten Element der Parameterliste lesen
'und ihren vollständigen Pfad ermitteln
strInFile = objFSO.GetAbsolutePathName(WScript.Arguments(0))
'Existiert die Eingabedatei?
If objFSO.FileExists(strInFile) Then
'Wenn zwei Parameter übergeben wurden, Name der Datei mit dem Codierungsalphabet
'aus dem zweiten Element der Parameterliste lesen, sonst auf den Standardwert setzen
If WScript.Arguments.Count > 1 Then
strAlphabetFile = WScript.Arguments(1)
Else
strAlphabetFile = strStdAlphabetFile
End If
'Vollständigen Pfad der Alphabetdatei ermitteln
strAlphabetFile = objFSO.GetAbsolutePathName(strAlphabetFile)
'Existiert die Datei mit dem Codierungsalphabet?
If objFSO.FileExists(strAlphabetFile) Then
'Objekt für reguläre Ausdrücke erzeugen
Set objRegExp = New RegExp
'Nur das erste Auftreten des Suchmusters finden
objRegExp.Global = False
'Suchmuster setzen
objRegExp.Pattern = "^(.{1})=(.{1,})$"
'Dictionary-Objekt erzeugen
Set objDictionary = CreateObject("Scripting.Dictionary")
'Groß-/Kleinschreibung unterscheiden
objDictionary.CompareMode = 0
'Alphabetdatei zum Lesen öffnen
Set objAlphabetFile = objFSO.OpenTextFile(strAlphabetFile, ForReading)
'Alphabetdatei bis zum Ende einlesen
While Not objAlphabetFile.AtEndOfStream
'Eine Zeile einlesen
strLine = objAlphabetFile.ReadLine
'Die Zeile in ihre Bestandteile zerlegen
Set colMatches = objRegExp.Execute(strLine)
'Schlüssel und Wert in das Dictionary eintragen
objDictionary.Add colMatches(0).SubMatches(0), colMatches(0).SubMatches(1)
Wend
'Alphabetdatei schließen
objAlphabetFile.Close
'Objekt erzeugen, das die zu verschlüsselnde Datei referenziert
Set objInFile = objFSO.GetFile(strInFile)
'Aus Pfad und Name der Eingabedatei Pfad und Name der Ausgabedatei erzeugen
'Aus "Test.txt" wird "Test_Codiert.txt"
strOutFile = objFSO.BuildPath(objFSO.GetParentFolderName(objInFile.Path), objFSO.GetBaseName(objInFile.Name) _
& "_Codiert." _
& objFSO.GetExtensionName(objInFile.Name) _
)
'Eingabedatei zum Lesen öffnen
Set objInStream = objInFile.OpenAsTextStream(ForReading)
'Ausgabedatei zum Schreiben öffnen
Set objOutStream = objFSO.OpenTextFile(strOutFile, ForWriting, True)
'Eingabedatei bis zum Ende einlesen
While Not objInStream.AtEndOfStream
'Eine Zeile lesen
strLine = objInStream.ReadLine
'Jedes Zeichen der Zeile verarbeiten
For I = 1 To Len(strLine)
'Ein Zeichen aus der aktuellen Zeile extrahieren
strChar = Mid(strLine, I, 1)
'Existiert für das aktuelle Zeichen eine Codierungsregel?
If objDictionary.Exists(strChar) Then
'Das codierte Zeichen in die Ausgabedatei schreiben
objOutStream.Write objDictionary.Item(strChar)
Else 'Keine Codierungsregel gefunden
'Das Zeichen uncodiert in die Ausgabedatei schreiben
objOutStream.Write strChar & strChar
End If
Next
'Zeilenumbruch in die Ausgabedatei schreiben
objOutStream.Write vbCrLf
Wend
'Aus- und Eingabedatei schließen
objOutStream.Close
objInStream.Close
'Returncode setzen
intResult = 0
Else 'Datei mit Codierungsalphabet existiert nicht
'Fehlermeldung ausgeben
WScript.Echo "Alphabetdatei " & strAlphabetFile & " nicht gefunden." & vbCrLf
'Hilfe ausgeben
PrintHelp
'Returncode setzen
intResult = 3
End If
Else 'Eingabedatei existiert nicht
'Fehlermeldung ausgeben
WScript.Echo "Eingabedatei " & strInFile & " nicht gefunden." & vbCrLf
'Hilfe ausgeben
PrintHelp
'Returncode setzen
intResult = 2
End If
Else 'Aufruf ohne Parameter
'Hilfe ausgeben
PrintHelp
'Returncode setzen
intResult = 1
End If
'Script beenden und Returncode zurückliefern
WScript.Quit intResult
'Unterprogramm zur Ausgabe der Hilfe
Sub PrintHelp
WScript.Echo "Aufruf : " & WScript.ScriptName & " ""Dateipfad"" [""Alphabetdatei""]"
WScript.Echo
WScript.Echo "Dateipfad : Pfad der zu verschlüsselnden Datei."
WScript.Echo "Alphabetdatei: Pfad zur Datei mit dem Codierungsalphabet."
WScript.Echo " Falls nicht angegeben, wird im aktuellen Verzeichnis"
WScript.Echo " nach der Datei " & strStdAlphabetFile & " gesucht."
End Sub
Den Code z.B. als
Encode.vbs
speichern und dann folgendermaßen aufrufen:cscript /nologo encode.vbs "PfadDerEingabedatei" ["PfadDerAlphabetdatei"]
Der Pfad zur Alphabetdatei ist optional. Wenn nicht angegeben, wird im aktuellen Verzeichnis nach einer Datei namens
Alphabet.txt
gesucht, die das Codierungsalphabet in der von Dir beschriebenen Form enthalten muss, also z.B.a=&%n<
b=)?"§
Du musst für Groß- und Kleinbuchstaben separate Einträge in der Datei anlegen oder in Zeile 44 die 0 durch eine 1 ersetzen.
Um VBScript zu lernen: Google mal nach
script56.chm
(englische Version von MS) oder lade Dir von hier die (teilweise) deutsche Version.Eine gute Übung wäre, den Decoder selbst zu schreiben . Du musst nur einige wenige Änderungen an obigem Code durchführen.
Noch ein Tipp: Falls Du wirklich die Zeichen aus der Eingabedatei durch mehrere Zeichen in der Ausgabedatei codieren willst, nimm für alle Zeichen eine konstante Anzahl Ersetzungszeichen.
Gruß
Friemler