monoffel
Goto Top

Wie viele Buchstaben hat ein Wort bzw. Satz ?

Hallo

So... ich hab jezt ewig lang nen langen aufsatz geschrieben, mit allem drum und dran. kaum will ich den abschicken steht da ich bin nicht eingeloggt und die ganze seite text weg.
normal kopier ich bei sowas immer den ganzen text falls sowas passiert, aber genau dann wenn ich glaube es passiert eh nie, passierts !!!!!!!
p.s. die suchfunktion ist kaputt , deshalb hab ich auch nix gefunden

Jezt nochmal in kurzform:

Ich suche nach einer Möglichkeit rauszufinden, wieviele buchstaben ein wert hat:
z.b. set /p pw=Passwort:
????? -> das passwort hat 7 buchstaben

außerdem komme ich einfach nicht mehr weiter bei folgendem plan:
... das pw hat 7 buchstaben
set /a gesamt=%buchstaben%+1 ( weil vor und hinter jeden buchstaben ein random wort soll)
... 8 zufällige längen erstellen (hab ich schon geschafft )
ergebnis z.b. 12 7 18 9 5 11 19 16
::wort 1 generieren
:randomwort%zahl% ( zahl = 1-8 )
set zufallswort%zahl%=%a%%b%%c%%d% ( jeder buchstabe wird einzeln generiert und dann zu einem wort zusammengefügt, dass aber jedesmal unterschiedlich lang ist)*

*hier problem 2

zufällige worter generieren hab ich geschafft, ich schaff das nurnich, jedem wort eine zufällige länge zu geben

danke im vorraus für die antowrten und dafür, dass ihr mir verzeiht, dass ich extrem genervt bin.... (beeinflusst auch rechtschreibung)

Content-Key: 116975

Url: https://administrator.de/contentid/116975

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: bastla
bastla 27.05.2009 um 21:40:10 Uhr
Goto Top
Hallo monoffel!

Die Länge könntest Du (ohne "delayedExpansion", was bei Passwörtern sicherlich vorteilhaft ist) zB so bestimmen:
@echo off & setlocal
set /p pw=Passwort
set /a L=0
:Loop
call set Z=%%pw:~%L%,1%%
if defined Z (set /a L+=1 & goto :Loop)
echo %pw% hat %L% Zeichen
Könntest Du Problem 2 vielleicht noch etwas genauer beschreiben (bin - hoffentlich nur heute face-wink - wohl etwas schwer von Begriff)?

Grüße
bastla
Mitglied: monoffel
monoffel 27.05.2009 um 22:07:50 Uhr
Goto Top
Hmm also wenn ich das Skript starte, passiert garnichts bzw. der Loop ist unendlich.
Ausgabe echo on: call set z=%pw~[zahl von 1-unendlich],1%
Oder muss ich irgendwo noch was einsetzen ?

Zu delayedexpansion: warum ist es denn schlecht wenn es an ist bei Passwörtern? Is doch eigentlich nur, dass man eine Variable in eine andere setzen kann...

Problem 2:
Also erstma wird %random% durch eine Zahl dividiert, so dass eine Zahl zwischen 0 und 20 rauskommen kann. (Finde ich einfacher und daher besser als diese Loops mit if LEQ , ausßerdem geht es schneller.)
Wenn das PW jezt 5 Buchstaben hat, brauche ich 6 Zufallswörter (Vor jeden Buchstaben ein Wort und +1 für dahinter)

set g=0
:genlength
echo %random% > nul  < ----- weil er sonst manchmal keine neue random zahl generiert und stattdessen die alte nochmal benuzt ----------
set /a g=%g%+1
set /a codelength=%random%/1640
set g%g%=%codelength%
if %codelength% LEQ 4 set /a g=%g%-1 & goto genlength
if not %g%==%alleBuchstaben% goto genlength
echo %g1% %g2% %g3% %g4% %g5% %g6%
pause

Ausgabe ist dann bei 5 Buchstaben z.B.: 15,18,5,18,15,19

Jezt "nurnoch" :
1 zufallswort mit Länge 15 Ziffern
1 zufallswort mit Länge 18 Ziffern
1 zufallswort mit Länge 5 Ziffern
...usw.

(Was geht ist: Alle zufallswörter verschieden, aber gleich lang; (meistens) alle zufallswörter gleich, aber unterschiedlich lang; oder einfach garnichts ( wenn zu wenig buchstaben ) )
Mitglied: bastla
bastla 27.05.2009 um 22:14:39 Uhr
Goto Top
Hallo monoffel!

Eine "leere" Eingabe hatte ich noch nicht berücksichtigt, daher müsste zur Vermeidung einer Endlosschleife noch vor Zeile 4 eingefügt werden:
if not defined pw (echo Kein Passwort eingegeben! & goto :eof)
Wenn Du eine Eingabe machst, sollte auch die Länge berechnet und ausgegeben werden.

Zu delayedexpansion: warum ist es denn schlecht wenn es an ist bei Passwörtern? Is doch eigentlich nur, dass man eine Variable in eine andere setzen kann...
Weil durch die Tatsache, dass Variable dann durch "!" begrenzt werden, das Rufzeichen als möglicher Bestandteil des Passworts wegfällt ...

Grüße
bastla
Mitglied: monoffel
monoffel 27.05.2009 um 22:28:19 Uhr
Goto Top
Ja schade nur, dass es keine leere Eingabe ist face-sad

So hab nochmal alles durchgeguckt...
Bei Zeile 06. if defined Z (set /a L+=1 & goto :Loop)
muss wahrscheinlich 06. if defined %Z% (set /a L+=1 & goto :Loop)
hin... (Prozentzeichen fehlen)

Aber als ergebnis kommt jezt immer 0
(Es sei denn ich gebe als Passwort "L" ein... Dann kommt 1 Zeichen , bei "lo" aber auch 1 Zeichen , ebenso bei "lol" ) ?_?
Mitglied: bastla
bastla 27.05.2009 um 22:33:34 Uhr
Goto Top
Hallo monoffel!

Sorry, kann ich nicht nachvollziehen ([Edit] Es sei denn, Du hättest am Ende der Zeile 5 ein Leerzeichen (liegt dann an der Forensoftware) - kann mit dem unten stehenden Code nicht mehr passieren [/Edit] ...

Teste mal folgenden Code:
@echo off & setlocal
set "pw=Das Passwort"  
set /a L=0
:Loop
call set "Z=%%pw:~%L%,1%%"  
if defined Z (set /a L+=1 & goto :Loop)
echo %pw% hat %L% Zeichen
Zur Zeile 6: Die Prozentzeichen gehören da nicht hin.

Grüße
bastla
Mitglied: monoffel
monoffel 27.05.2009 um 22:41:04 Uhr
Goto Top
Ok danke face-wink
Ich hab beides nochmal verglichen und ausprobiert und es scheint daran zu liegen:

Geht nicht: call set Z=%%pw:~%L%,1%% (das war im ersten Post)
Geht : call set "Z=%%pw:~%L%,1%%" (2ter Post)

Die "" machen den Unterschied

...Jezt nurnoch Problem 2 und ich bin glücklich face-smile

EDIT: Ich glaube wir haben beide den Fehler gefunden >.<
und nochwas zu den setlocal: Was ändert sicht da ? Gibts dann irgendwas was nichtmehr funktioniert...
Mitglied: dog
dog 27.05.2009 um 23:06:53 Uhr
Goto Top
So... ich hab jezt ewig lang nen langen aufsatz geschrieben, mit allem drum und dran. kaum will ich den abschicken steht da ich bin nicht eingeloggt und die ganze seite text weg.

Da gibt es einen ganz einfachen Trick: Wenn die Fehlermeldung kommt machst du einen zweiten Tab auf, loggst dich in dem wieder ein und drückst im Anderen auf Reload (die POST-Meldung mit OK bestätigen) - schon ist der Artikel gespeichert...
Mitglied: monoffel
monoffel 27.05.2009 um 23:11:32 Uhr
Goto Top
Ja aber bis ich gemerkt hab was los war, hab ich schon panich auf zurück gemacht und irgendwas gemacht.
Habs dann nach einloggen versucht mit post melundg dings, aber dann kam ich nur bis schritt 2 bei Beitrag erstellen...
Mitglied: bastla
bastla 27.05.2009 um 23:14:50 Uhr
Goto Top
Hallo monoffel!

Meinst Du mit Problem 2 etwa folgendes?
@echo off & setlocal
set /p pw=Passwort
set /a L=0
if not defined pw (echo Kein Passwort eingegeben! & goto :eof)
:Loop
call set "Z=%%pw:~%L%,1%%"  
if defined Z (set /a L+=1 & goto :Loop)
echo %pw% hat %L% Zeichen

set "Code="  
set "Lens="  
set /a L-=1

for /l %%i in (0,1,%L%) do call :ProcessChar %%i
set /a codelength=%random%/1640
set "Lens=%Lens%%codelength%"  
for /l %%i in (1,1,%codelength%) do call :GetRandomDigit
echo %Lens%
echo %Code%
goto :eof

:ProcessChar
set /a codelength=%random%/1640
set "Lens=%Lens%%codelength%,"  
for /l %%i in (1,1,%codelength%) do call :GetRandomDigit
call set "Code=%Code%%%pw:~%1,1%%"  
goto :eof

:GetRandomDigit
set "Code=%Code%%random:~-1%  
goto :eof

Zur Verwendung von "delayedExpansion": Probier mal die beiden Beispiele, dann weißt Du, was ich meine ...

Ohne:
@echo off & setlocal
set "pw=Das Passwort! und noch mehr! ist drin"  
echo %pw%
... und mit:
@echo off & setlocal enabledelayedexpansion
set "pw=Das Passwort! und noch mehr! ist drin"  
echo %pw%
echo !pw!
Grüße
bastla
Mitglied: monoffel
monoffel 27.05.2009 um 23:42:51 Uhr
Goto Top
Hmm ok also der Unterschied ist klar und oben zu den Programm:

(ich versteh es nicht und es geht nicht ... mus ausmachen face-smile )
Mitglied: bastla
bastla 27.05.2009 um 23:48:47 Uhr
Goto Top
Hallo monoffel!

Das Programm schreibt vor, zwischen und nach die einzelnen Zeichen des Passworts eine unterschiedliche Anzahl zufällilger Ziffern (und speichert die Stellenanzahl, durch Kommata getrennt - in einem String) - der Ablauf sieht zB so aus:
PasswortABCDEF
ABCDEF hat 6 Zeichen
9,15,13,10,14,7,3
807720380A201087415321475B1525362730284C8158749872D87615299992590E7694298F540
^   9   ^A^      15     ^...
Grüße
bastla
Mitglied: monoffel
monoffel 28.05.2009 um 14:33:28 Uhr
Goto Top
ok... habs geschafft, dass das Programm sich nicht schliesst.


Der weitere Ablauf:

erstma
reg query %key5% /v firstrun
if errorlevel 1 goto setup

bla bla

:setup
dein script...

Wenn ich jezt das PW und die Stellenzahl in der registry speichere (nur zum test)
reg add %key5% /f /v "passwort" /d "%code%"
reg add %key5% /f /v "zeichenfolge" /d "%lens%"
reg add %key5% /f /v "firstrun" /d "0"

...Dann nach dem Setup
unter blabla wird beides ausgelesen:
FOR /F "tokens=2*" %%i in ('reg query %key5% /v passwort^|find "REG_SZ"') do set Vpasswort=%%j
FOR /F "tokens=2*" %%i in ('reg query %key5% /v zeichenfolge^|find "REG_SZ"') do set reglens=%%j

Hier dann die Frage: Wie kriege ich aus dem verschl. PW wieder das richtige?
(z.B. erst 9 Buchstaben löschen, dann einen dalassen, dann 15 löschen...)


...So und dann noch: Bei dir sind es ja Zahlen und mein Skript, um die zufallswörter zu erhalten sieht so aus:
:start2
echo %random% > nul
set /a r=%r%+1
set /a nextnum=%random%/500
::echo %nextnum%
if %nextnum%==0 set c%r%=q&goto fertig
(und so weiter alle zahlen durch)
if %nextnum%==64 set "c%r%= "&goto fertig  
if %nextnum%==65 set c%r%=e
:fertig
if %r%==%codelength% (set /a t=%t%+1& goto codefertig1) else goto start2

:codefertig1
set code1=%c1%%c2%%c3%%c4%%c5%%c6%%c7%%c8%%c9%%c10%%c11%%c12%%c13%%c14%%c15%%c16%%c17%%c18%%c19%%c20%
set scode%t%=%code1%
set r=0
if %t%==%buchstaben% (goto fertig) else goto start2
:fertig
echo %buchstaben% Code(s), Laenge %codelength% :
echo.%scode1%%scode2%%scode3%%scode4%%scode5%%scode6%%scode7%%scode8%%scode9%%scode10%%scode11%%scode12%%scode13%%scode14%%scode15%%scode16%%scode17%%scode18%%scode19%%scode20%

... Da ist sind natürlich alle Buchstaben gleichlang

Jezt noch beide kombinieren und außerdem wichtig bei deinem, dass keine Länge kleiner als 5 sein sollte.
...und noch so ne Idee, ich könnte nur die Zeichenfolge unsichtbar für regedit machen (name länger als 255 zeichen)
Mitglied: monoffel
monoffel 29.05.2009 um 22:25:15 Uhr
Goto Top
Ohh na toll, diesma schreib ich noch nen Kommentar und komme auf die zurück Taste (= wieder alles weg)
Ich hab immer noch nicht alle Probleme gelöst:
1.Wie kriege ich aus dem verschl. PW wieder das richtige? (z.B. erst 9 Buchstaben löschen, dann einen dalassen, dann 15 löschen...)
2.Bei deinem Skript noch machen, dass keins genommen wird, dass kleiner als 5 ist
3.Es müssen natürlich noch Buchstaben rauskommen und nicht nur Zahlen. (Dazu mein Skript oben)
Mitglied: bastla
bastla 29.05.2009 um 22:39:19 Uhr
Goto Top
Hallo monoffel!

Vorweg einmal 1.
@echo off & setlocal
set "Vpasswort=807720380A201087415321475B1525362730284C8158749872D87615299992590E7694298F540"  
set "reglens=9,15,13,10,14,7,3"  

set PW=
for %%i in (%reglens%) do call :ProcessPart %%i
echo %PW%
goto :eof

:ProcessPart
set /a Pos+=%1
call set "PW=%%PW%%%%Vpasswort:~%Pos%,1%%"  
::call set "Z=%%Vpasswort:~%Pos%,1%%" 
::set "PW=%PW%%Z%" 
set /a Pos+=1
goto :eof
und 2.
@echo off & setlocal
set /p pw=Passwort
set /a L=0
if not defined pw (echo Kein Passwort eingegeben! & goto :eof)
:Loop
call set "Z=%%pw:~%L%,1%%"  
if defined Z (set /a L+=1 & goto :Loop)
echo %pw% hat %L% Zeichen

set "Code="  
set "Lens="  
set /a L-=1

for /l %%i in (0,1,%L%) do call :ProcessChar %%i
set /a codelength=%random% %% 16 + 5
set "Lens=%Lens%%codelength%"  
for /l %%i in (1,1,%codelength%) do call :GetRandomDigit
echo %Lens%
echo %Code%
goto :eof

:ProcessChar
set /a codelength=%random%%%16+5
set "Lens=%Lens%%codelength%,"  
for /l %%i in (1,1,%codelength%) do call :GetRandomDigit
call set "Code=%Code%%%pw:~%1,1%%"  
goto :eof

:GetRandomDigit
set "Code=%Code%%random:~-1%  
goto :eof
Grüße
bastla
Mitglied: bastla
bastla 29.05.2009 um 23:25:37 Uhr
Goto Top
... und damit nicht nur Ziffern vorkommen, könnte das dann etwa so aussehen:
@echo off & setlocal
set "Chars=0123456789ABCD...XYZabcd...xyz...:?()$"  
::Anzahl der verfügbaren Zeichen angeben oder,
::wie unten für %pw% gezeigt, Länge mit einer Schleife bestimmen
set "NumberOfChars=40"  

set /p pw=Passwort
set /a L=0
if not defined pw (echo Kein Passwort eingegeben! & goto :eof)
:Loop
call set "Z=%%pw:~%L%,1%%"  
if defined Z (set /a L+=1 & goto :Loop)
echo %pw% hat %L% Zeichen

set "Code="  
set "Lens="  
set /a L-=1

for /l %%i in (0,1,%L%) do call :ProcessChar %%i
set /a codelength=%random% %% 16 + 5
set "Lens=%Lens%%codelength%"  
for /l %%i in (1,1,%codelength%) do call :GetRandomChar
echo %Lens%
echo %Code%
goto :eof

:ProcessChar
set /a codelength=%random%%%16+5
set "Lens=%Lens%%codelength%,"  
for /l %%i in (1,1,%codelength%) do call :GetRandomChar
call set "Code=%Code%%%pw:~%1,1%%"  
goto :eof

:GetRandomChar
set /a Pos=%random% %% %NumberOfChars%
call set "Code=%%Code%%%%Chars:~%Pos%,1%%  
goto :eof
Grüße
bastla
Mitglied: monoffel
monoffel 30.05.2009 um 09:31:18 Uhr
Goto Top
Ok, klappt alles und dank, dass du dir soviel Arbeit wegen mir gemacht hast.
Man könnte jezt zwar noch die Lens umdrehen oder so, aber es schickt schon. ;)

Ich versuch das ganze jezt noch in eine Datei zu kriegen und dann bin ich fürs erste malwieder fertig.

:EDIT: Wegen dem setlocal (wo ich nich genau weis obs was verhindert bei mir) hab ich am ende wieder endlocal geschrieben...
Das PW wurde zwar immer richtig ausgelesen aber hat dann nichtmehr gegelten als es abgefragt wurde. (Bis ich da mal drauf gekommen bin...)

:EDIT2: So alles geschafft face-smile