Batch Set/p variable?

1 Antwort

naja Verschlüsselung ist was anderes😁🤪

Irgendwie fehlen essenzielle Zeilen damit !DelayedExpansionVariablen! funktionieren.

setlocal EnableDelayedExpansion  &rem auf  diese  Zeile  kommt es  an
set "tst=blub"

(
  set "tst=%tst%blah"
  echo undelayed : %tst%
  echo delayed   : !tst!
)

DelayedExpansion sollte man möglichst meiden, da diese besonders bei Variablen mit Nutzereingaben tückisch ist (der Nutzer könnte ein Ausrufezeichen eingeben welches jedoch von !Variablen! "verschluckt" wird)

Allerdings kannst Du dir den ganzen Murks mit dem "if" im Klammerblock sparen. Das Speichern/Einlesen von Variablen geht viel einfacher.

set "var_1=blubb"
set "var_2=blah"
rem  alle Variablen(namen) die  mit var_ beginnen in eine Datei  speichern
set "var_" >"meineDatei.txt"

rem alle in der datei gespeicherten variablen einlesen
for /f "usebackq tokens=*" %%a in ("meineDatei.txt") do (set "%%a")

Völliger Blödsinn, in die nächste Zeile springen:

goto  label
:label

..was soll das bringen?

Allgemeiner Ratschlag : Verzierungen/Color/CLS erst in ein Script einfügen, wenn der wichtige Code reibungslos funktioniert!!!

Ich lasse mal den ganzen Schnickschnack weg und konzentriere auf das Wesentliche.

pass.txt

PASSPART1=blubb
PASSPART2=blah

get_passwort.cmd

@echo off
chcp 65001 >nul
set "FULL_PATH_WINDOW_PASS=C:\dein Pfad\pass.txt"

 rem Variablen direkt aus Datei einlesen. Du brauchst dich nicht um um Variablennamen=value zu kümmern
for /f "usebackq tokens=*" %%a in ("%FULL_PATH_WINDOW_PASS%") do (set "%%a")

set "pass" &rem zur Demo mal anzeigen

 rem passwortteile vertauscht zusammenfügen
set "CRYPTED_PASS=%PASSPART2%%PASSPART1%"

set /p "PASSINPUT="Passwort: "
if "%PASSINPUT%"=="%CRYPTED_PASS%" (
  goto :TRUE_INPUT
) else (
  goto :WRONG_INPUT
)
:WRONG_INPUT
echo Falsches Passwort!
pause
exit /b
:TRUE_INPUT
echo Richtig
pause

Natürlich ist es Käse Passwörter im Klartext zu speichern.

Passwörter speichert man verschlüsselt als Hashwert. Hashwerte (Prüfsummen) sind nicht auf das Original rückführbar!

create_PaswortHasch.cmd

@echo off
chcp 65001 >nul
set "tempfile=%temp%\dateiname.irgendeine.Endung"  &rem völlig  egal, da diese  Datei  innerhhalb  millisekunden  wieder  gelöscht  wird
set "PW_HashFile=PasswortHash.txt"
rem lies passwort von der Tastatur (darf  auch Sonderzeichen  enthalten)
set /p "Raw_Passwort= Enter your Passwort for encryption:"
rem  schreibe dieses  in eine temporäre Datei
>"%tempfile%" echo "%Raw_Passwort%"
set "Raw_Passwort="  &rem Variable gleich  wieder löschen!
rem  erzeuge Hash der Datei und  speichere  diesen  wir  brauchen  nur  die 2.Zeile. Die temporäre  Datei  wird sofort nach  dem hashen gelöscht!
for /f "skip=1 tokens=*" %%a in ('CertUtil -hashfile "%tempfile%" SHA256 ^&del "%tempfile%"') do (
    >"%PW_HashFile%" echo %%a
    echo der Hash für das  eingegebne Passwort:
    echo %%a
    goto :break
)
:break
pause

compare_crypted_Paswort.cmd

@echo off
chcp 65001 >nul

set "tempfile=%temp%\irgenwas.tmp"
set "PW_HashFile=PasswortHash.txt"

rem Hash  aus Datei  einlesen
for /f "usebackq tokens=*" %%a in ("%PW_HashFile%") do (set "True_PW_Hash=%%a")

rem passwort  abfragen
set /p "PW_Input=Enter your Passwort:"
>"%tempfile%" echo "%PW_Input%"
set "PW_Input="
rem ...und  wie  gehabt  hashen aber  diesmal  in eien  variable
for /f "skip=1 tokens=*" %%a in ('CertUtil -hashfile "%tempfile%" SHA256 ^&del "%tempfile%"') do (
    set "PW_InputHash=%%a" &rem in variable  speichern
    goto :break
)
:break

if "%PW_InputHash%"=="%True_PW_Hash%" (
    goto :TRUE_INPUT
) else (
    goto :WRONG_INPUT
)

:WRONG_INPUT
echo Falsches Passwort!
pause
exit /b
:TRUE_INPUT
echo Richtig
)
pause

das ganze ist natürlich nur Spielerei, da man einfach nur die Batch editieren muss um die Passwortabfrage zu umgehen.

Ein letzes Wort noch...

Vergiss Batch und verwende Powershell!

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren