Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Atbashverfahren zum laufenbringen

Frage Entwicklung Batch & Shell

Mitglied: Julian57

Julian57 (Level 1) - Jetzt verbinden

06.12.2010, aktualisiert 13.12.2010, 3332 Aufrufe, 7 Kommentare

Hallo,
ich habe heute angefangen einen Batch zu schreiben der mir Texte nach Atbash verschlüsselt
Ich habe dabei noch einige Problem festgestellt
1. Programm verschlüsselt nicht zuverlässig, d.h. kommen Fehler vor.
z.B. ich verschlüssel "Hallo" dann kommt erstmal "szooo" raus,
wenn ich es dann entschlüssele kommt wiederrum "Halll" heraus
2. Würde gerne den Inhalt einer txt komplett auslesen und in einer Variable speichern,
funktioniert leider nicht wie ich das schon habe!!!
01.
 FOR /f %%f IN (%wahl%.txt) DO set x=%%f
Hier mein aktueller Code:
01.
@echo off&setlocal 
02.
title Atbash 
03.
 
04.
:Anfang 
05.
set "Neu=" 
06.
echo **Hauptmenu** 
07.
echo. 
08.
echo Bitte waehlen sie eine Aktion aus: 
09.
echo. 
10.
echo [1] Text ver-/entschlusseln  
11.
echo [2] Programm beenden 
12.
echo. 
13.
set /p wahl= 
14.
If %wahl%==1 (cls & goto ver) 
15.
If %wahl%==2 (del "%~dp0LineOffSet1.cmd" "%~dp0LineOffSet.cmd" & goto :eof) 
16.
echo falsche Eingabe 
17.
pause 
18.
cls  
19.
goto Anfang 
20.
 
21.
:ver 
22.
Echo Waehlen sie eine Aktion aus: 
23.
echo [1] Text manuell eingeben 
24.
echo [2] Text aus Textdokument auslesen  
25.
set /p wahl= 
26.
If %wahl%==1 (cls & goto verman) 
27.
If %wahl%==2 (cls & goto verlesen) 
28.
goto ver 
29.
 
30.
:verman 
31.
echo Orginaltext: 
32.
set /p Original= 
33.
echo. 
34.
if not defined Original goto :verman 
35.
set "Usebackq=" 
36.
echo Neuertext: 
37.
call :Lineoffset 
38.
echo. 
39.
goto verwahl 
40.
 
41.
:verlesen 
42.
echo Bitte geben sie den korekten Pfad des Text-Dokuments an!!! 
43.
set /p Original= 
44.
if not exist "%Original%" goto :verlesen 
45.
set "Usebackq=usebackq" 
46.
echo. 
47.
echo Ausgelesener Text: 
48.
for /f "usebackq delims=" %%i in ("%Original%") do echo %%i 
49.
echo.&echo Neuer Text: 
50.
call :Lineoffset 
51.
 
52.
:verwahl 
53.
echo. 
54.
echo Wollen sie den Text in ein Text-Dokument speichern? 
55.
echo [1]Ja, [2]Nein 
56.
set /p wahl= 
57.
If %wahl%==1 (goto vertxt) 
58.
If %wahl%==2 (cls & goto Anfang) 
59.
cls 
60.
goto verwahl 
61.
 
62.
:vertxt 
63.
cls 
64.
echo Geben sie bitte den Textdokument einen Namen 
65.
set /p wahl= 
66.
if not defined wahl goto :vertxt 
67.
setlocal enabledelayedexpansion 
68.
if defined usebackq ( 
69.
	(	for /l %%i in (1,1,%Nr%) do echo.!%%iLineout! 
70.
	)>%wahl%.txt 
71.
)&endlocal & cls & goto :Anfang 
72.
(echo OrginalText: !Original! 
73.
echo Neuertext  : !1Lineout! 
74.
endlocal 
75.
)>> %wahl%.txt 
76.
cls 
77.
goto Anfang 
78.
 
79.
:Lineoffset 
80.
@echo off 
81.
if defined Satz goto :read 
82.
::AtBash funktioniert mit 2 Angebenen Zeichen das erste wird mit dem 2. ersetzt 
83.
set "Crypt=atbash" 
84.
 
85.
set "Crypt1=%Crypt:~0,1%" 
86.
set "Crypt2=%Crypt:~1,1%" 
87.
 
88.
(echo @echo off ^& setlocal enabledelayedexpansion 
89.
echo echo.!Line1! 
90.
echo endlocal 
91.
)>"%~dp0LineOffSet1.cmd" 
92.
(echo @echo off ^& setlocal enabledelayedexpansion 
93.
echo echo.!Line! 
94.
echo echo. 
95.
echo endlocal 
96.
)>"%~dp0LineOffSet.cmd" 
97.
 
98.
setlocal enabledelayedexpansion 
99.
(echo.!Crypt1! 
100.
)>"%temp%\Crypt1" 
101.
 
102.
(echo.!Crypt2! 
103.
)>"%temp%\Crypt2" 
104.
::Zeichensatz zum Verschlüsseln angeben 
105.
for %%i in (a A b B c C d D e E f F g G H h i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y Z z 0 1 2 3 4 5 6 7 8 9) do set "Line=!Line!%%i" 
106.
 
107.
for /f "delims=:" %%j in ('"%~dp0LineOffSet.cmd"^| findstr /o ^^^^') do set /a LE=%%j-3 
108.
for /l %%l in (0,1,!LE!) do ( 
109.
	set "Line1=!Line:~%%l,1!" 
110.
	"%~dp0LineOffSet1.cmd"|findstr /g:"%temp%\Crypt1" >nul&& set CrNr1=%%l 
111.
	"%~dp0LineOffSet1.cmd"|findstr /g:"%temp%\Crypt2" >nul&& set CrNr2=%%l 
112.
113.
set "Satz=!Line!!Line!!Line:~0,%CrNr2%!!Line:~%CrNr2%,1!" 
114.
set /a LE+=CrNr1 
115.
(for /l %%l in (%CrNr1%,1,!LE!) do for /f "delims=" %%i in ("!Satz:~%%l,1!") do echo %%i)>"%temp%\Orig" 
116.
endlocal&set "Usebackq=%usebackq%"&set "Satz=%Satz%" 
117.
:read 
118.
set /a Nr = 0 
119.
for /f "%usebackq% delims=" %%i in ("%Original%") do (set Line=%%i 
120.
	set "Lineout=" 
121.
	for /f "delims=:" %%j in ('"%~dp0LineOffSet.cmd"^| findstr /o ^^^^') do set /a LE=%%j-3 
122.
	setlocal enabledelayedexpansion 
123.
	for /l %%k in (0,1,!LE!) do (set "Lineoff=" 
124.
		for /f "delims=" %%p in ("!Line:~%%k,1!") do ( 
125.
			for /f "tokens=1,2 delims=:" %%m in ('findstr /n ^^^^ "%temp%\Orig"') do ( 
126.
				for /f "delims=" %%o in ("!Satz:~-%%m,1!") do ( 
127.
					if "%%p" == "%%n" set "Lineoff=%%o" 
128.
		)	)	) 
129.
		if not defined Lineoff (set "Lineout=!Lineout!!Line:~%%k,1!" 
130.
		) else 	set "Lineout=!Lineout!!Lineoff!" 
131.
	)	 
132.
	echo.!Lineout! 
133.
	for /f %%k in ('set /a "Nr + = 1"') do for /f "delims=" %%j in ("!Lineout!") do endlocal& set "Nr=%%k"& set "%%kLineout=%%j" 
134.
)%Neu% 
135.
goto :eof

Ich hoffe ihr könnt mir bei meinen zwei anliegen helfen

Mit freundlichen Grüßen

Julian57

[edit]Code durch funktionierenden Code ersetzt[/edit]
Mitglied: pieh-ejdsch
06.12.2010 um 23:26 Uhr
moin Julian,

das mit dem Umettikettieren des gesamten Textes mittels mehreren set Anweisungen hintereinander ist eine Schlechte Wahl. Jedenfalls so.

als Beispiel: "abczyx" würde mit dem Vollständigen Atbash-Algorithmus komplett zu "abcabc" werden - weil wenn x, y und z Verschlüsselt wird sind ja a, b und c auch schon zu x, y sowie z mutiert.

Am besten arbeitest Du mit Offsets und Ackerst jedes Zeichen der gesamten Zeile nacheinander ab.

in etwa so
01.
@echo off & setlocal 
02.
:: Das Programm "LineOffSet.cmd" ist zum Feststellen der Zeilenlaenge erforderlich wenn Sonderzeichen im Text sind! 
03.
(echo @echo off ^& setlocal enabledelayedexpansion 
04.
echo echo.!Line! 
05.
echo echo. 
06.
echo endlocal 
07.
)>"%~dp0LineOffSet.cmd" 
08.
 
09.
:: %~1 ist Deine Datei als angegebener Parameter oder Du ersetzt es mit %wahl%.txt 
10.
for /f "usebackq delims=" %%i in ("%~1") do (set Line=%%i 
11.
	set "Lineout=" 
12.
	for /f "delims=:" %%j in ('"%~dp0LineOffSet.cmd"^|findstr /o .*') do set /a LE=%%j-3 
13.
	setlocal enabledelayedexpansion 
14.
	for /l %%k in (0,1,!LE!) do ( 
15.
		set "lineoff=!Line:~%%k,1!" 
16.
		:: Comment 
17.
		:: Hier kommt Dein Algorithmus rein 
18.
		:: set "!lineoff:a=z!" 
19.
		:: set "!lineoff:z=a!" 
20.
		:: ....... 
21.
		:: echo !lineoff! 
22.
		set "Lineout=!Lineout!!Lineoff!" 
23.
24.
	echo !Lineout! 
25.
	endlocal 
26.
27.
del "%~dp0LineOffSet.cmd"	 
28.
goto :eof
Gruß Phil
Bitte warten ..
Mitglied: Julian57
07.12.2010 um 15:25 Uhr
Hallo,
Versteh leider noch Bahnhof
Was ist Offset und Ackerst?

Wäre nett wenn du das mir direkt mit meinen Programm verknüpfen könntest.

Mit freundlichen Grüßen

Julian57
Bitte warten ..
Mitglied: pieh-ejdsch
08.12.2010 um 23:04 Uhr
Hi Julain,

also der Offset von einem, Zeichen ist die genaue Positiion des Zeichens in der Zeile bzw. angegebenen Zeichenfolge (womit "FINDSTR /O" bis Dato noch Probleme hat!) für mich aber nicht ...
hehe und "Ackerst" synonym für Durchabreiten: der Reihe nacheinander abarbeiten - vom Wortstamm: den Acker bearbeiten.

der "atbash" Algoritmus ist ja im Grunde genommen wie die Enigma-(De-)Chiffrierung (monographischen Algorithmus) aufgebaut nur das die entsprechenden Zeichen Rückwärts wieder aus dem Zeichensatz chiffriert werden und auch die Hin-Chiffrierung umgekehrt zur Rück-Chiffrierung ist - sprich die Ver-Schlüselung ist mit der Ent-Schlüsselung identisch und braucht nicht seperat gemacht zu werden.

ich hatte heute einen langen Arbeitstag, Geburtstag war auch noch nachzufeiern ... bin zwar schon beim bearbeiten an Deinem Script, aber jetzt ist erst mal Schicht im Schacht. Ich werde mich morgen mal länger dransetzen.

Gruß Phil
Bitte warten ..
Mitglied: Julian57
09.12.2010 um 17:35 Uhr
Danke für die kurze Erklärung :D
Und danke das du das Script fertig machst,
kannst dir auch ruhig Zeit lassen damit
Bitte warten ..
Mitglied: pieh-ejdsch
12.12.2010 um 02:17 Uhr
Hi Julian,

hier ist der aufbereitete Code und etas verkürzt. Hoffe es gefällt Dir so.

01.
@echo off&setlocal 
02.
title Atbash 
03.
 
04.
:Anfang 
05.
set "Neu=" 
06.
echo **Hauptmenu** 
07.
echo. 
08.
echo Bitte waehlen sie eine Aktion aus: 
09.
echo. 
10.
echo [1] Text ver-/entschlusseln  
11.
echo [2] Programm beenden 
12.
echo. 
13.
set /p wahl= 
14.
If %wahl%==1 (cls & goto ver) 
15.
If %wahl%==2 (del "%~dp0LineOffSet1.cmd" "%~dp0LineOffSet.cmd" & goto :eof) 
16.
echo falsche Eingabe 
17.
pause 
18.
cls  
19.
goto Anfang 
20.
 
21.
:ver 
22.
Echo Waehlen sie eine Aktion aus: 
23.
echo [1] Text manuell eingeben 
24.
echo [2] Text aus Textdokument auslesen  
25.
set /p wahl= 
26.
If %wahl%==1 (cls & goto verman) 
27.
If %wahl%==2 (cls & goto verlesen) 
28.
goto ver 
29.
 
30.
:verman 
31.
echo Orginaltext: 
32.
set /p Original= 
33.
echo. 
34.
if not defined Original goto :verman 
35.
set "Usebackq=" 
36.
echo Neuertext: 
37.
call :Lineoffset 
38.
echo. 
39.
goto verwahl 
40.
 
41.
:verlesen 
42.
echo Bitte geben sie den korekten Pfad des Text-Dokuments an!!! 
43.
set /p Original= 
44.
if not exist "%Original%" goto :verlesen 
45.
set "Usebackq=usebackq" 
46.
echo. 
47.
echo Ausgelesener Text: 
48.
for /f "usebackq delims=" %%i in ("%Original%") do echo %%i 
49.
echo.&echo Neuer Text: 
50.
call :Lineoffset 
51.
 
52.
:verwahl 
53.
echo. 
54.
echo Wollen sie den Text in ein Text-Dokument speichern? 
55.
echo [1]Ja, [2]Nein 
56.
set /p wahl= 
57.
If %wahl%==1 (goto vertxt) 
58.
If %wahl%==2 (cls & goto Anfang) 
59.
cls 
60.
goto verwahl 
61.
 
62.
:vertxt 
63.
cls 
64.
echo Geben sie bitte den Textdokument einen Namen 
65.
set /p wahl= 
66.
if not defined wahl goto :vertxt 
67.
setlocal enabledelayedexpansion 
68.
if defined usebackq ( 
69.
	(	for /l %%i in (1,1,%Nr%) do echo.!%%iLineout! 
70.
	)>%wahl%.txt 
71.
)&endlocal & cls & goto :Anfang 
72.
(echo OrginalText: !Original! 
73.
echo Neuertext  : !1Lineout! 
74.
endlocal 
75.
)>> %wahl%.txt 
76.
cls 
77.
goto Anfang 
78.
 
79.
:Lineoffset 
80.
@echo off 
81.
if defined Satz goto :read 
82.
::AtBash funktioniert mit 2 Angebenen Zeichen das erste wird mit dem 2. ersetzt 
83.
set "Crypt=atbash" 
84.
 
85.
set "Crypt1=%Crypt:~0,1%" 
86.
set "Crypt2=%Crypt:~1,1%" 
87.
 
88.
(echo @echo off ^& setlocal enabledelayedexpansion 
89.
echo echo.!Line1! 
90.
echo endlocal 
91.
)>"%~dp0LineOffSet1.cmd" 
92.
(echo @echo off ^& setlocal enabledelayedexpansion 
93.
echo echo.!Line! 
94.
echo echo. 
95.
echo endlocal 
96.
)>"%~dp0LineOffSet.cmd" 
97.
 
98.
setlocal enabledelayedexpansion 
99.
(echo.!Crypt1! 
100.
)>"%temp%\Crypt1" 
101.
 
102.
(echo.!Crypt2! 
103.
)>"%temp%\Crypt2" 
104.
::Zeichensatz zum Verschlüsseln angeben 
105.
for %%i in (a A b B c C d D e E f F g G H h i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y Z z 0 1 2 3 4 5 6 7 8 9) do set "Line=!Line!%%i" 
106.
 
107.
for /f "delims=:" %%j in ('"%~dp0LineOffSet.cmd"^| findstr /o ^^^^') do set /a LE=%%j-3 
108.
for /l %%l in (0,1,!LE!) do ( 
109.
	set "Line1=!Line:~%%l,1!" 
110.
	"%~dp0LineOffSet1.cmd"|findstr /g:"%temp%\Crypt1" >nul&& set CrNr1=%%l 
111.
	"%~dp0LineOffSet1.cmd"|findstr /g:"%temp%\Crypt2" >nul&& set CrNr2=%%l 
112.
113.
set "Satz=!Line!!Line!!Line:~0,%CrNr2%!!Line:~%CrNr2%,1!" 
114.
set /a LE+=CrNr1 
115.
(for /l %%l in (%CrNr1%,1,!LE!) do for /f "delims=" %%i in ("!Satz:~%%l,1!") do echo %%i)>"%temp%\Orig" 
116.
endlocal&set "Usebackq=%usebackq%"&set "Satz=%Satz%" 
117.
:read 
118.
set /a Nr = 0 
119.
for /f "%usebackq% delims=" %%i in ("%Original%") do (set Line=%%i 
120.
	set "Lineout=" 
121.
	for /f "delims=:" %%j in ('"%~dp0LineOffSet.cmd"^| findstr /o ^^^^') do set /a LE=%%j-3 
122.
	setlocal enabledelayedexpansion 
123.
	for /l %%k in (0,1,!LE!) do (set "Lineoff=" 
124.
		for /f "delims=" %%p in ("!Line:~%%k,1!") do ( 
125.
			for /f "tokens=1,2 delims=:" %%m in ('findstr /n ^^^^ "%temp%\Orig"') do ( 
126.
				for /f "delims=" %%o in ("!Satz:~-%%m,1!") do ( 
127.
					if "%%p" == "%%n" set "Lineoff=%%o" 
128.
		)	)	) 
129.
		if not defined Lineoff (set "Lineout=!Lineout!!Line:~%%k,1!" 
130.
		) else 	set "Lineout=!Lineout!!Lineoff!" 
131.
	)	 
132.
	echo.!Lineout! 
133.
	for /f %%k in ('set /a "Nr + = 1"') do for /f "delims=" %%j in ("!Lineout!") do endlocal& set "Nr=%%k"& set "%%kLineout=%%j" 
134.
)%Neu% 
135.
goto :eof
[Edit] code kommpletiert (siehe nächste Anwort von mir) [/Edit]

Gruß Phil
Bitte warten ..
Mitglied: Julian57
12.12.2010 um 19:15 Uhr
Hey super genau so hab ich mir das vorgestellt.
danke Phil :D
Bitte warten ..
Mitglied: pieh-ejdsch
12.12.2010 um 20:14 Uhr
Hi Julian,

freut mich das es so passt.

ich hab noch eine Kleine Änderung eingebaut, damit die Zeilen aus einer *.txt jeweils in eine Variable gespeichert werden und das abspeichern des Umchiffrierten Textes ins neue Dokument schneller vonstatten geht.

Bearbeitest Du bitte Deinen Start-Beitrag und setzt einen Grünen Hacken: \/

Danke

Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...