160 lines
4.3 KiB
Plaintext
160 lines
4.3 KiB
Plaintext
1 N=1
|
|
2 L=8
|
|
3 M$=CHR$(13)
|
|
4 D$=CHR$(4)
|
|
5 S$(0)="S"
|
|
6 F$="A FILE"
|
|
7 C$(1)=" (CURRENT OPTION)"
|
|
8 DEF FN R(T)=ASC(MID$(G$(T),INT(RND(1)*LEN(G$(T))+1),1))
|
|
9 GOSUB 750
|
|
10 FOR Q = 0 TO 1 STEP 0
|
|
20 GOSUB 50CHOOSE
|
|
30 NEXT Q
|
|
40 END
|
|
|
|
REM *** CHOOSE ***
|
|
50 PRINT M$M$"1 GEN 2 DISP 3 FILE 4 LEN 5 NUM 6 SEED"
|
|
60 PRINT "7 CHR 8 HELP 9 QUIT "CHR$(10)"CHOOSE AN OPTION: ";
|
|
70 GET K$
|
|
75 IF K$ > CHR$(95) THEN K$ = CHR$(ASC(K$) - 32)
|
|
80 PRINT K$
|
|
85 ON VAL(K$) GOTO 100,200,300,400,500,600,700,800,900
|
|
90 GOTO 210OPTIONS
|
|
|
|
REM *** GENERATE ***
|
|
100 PRINT M$
|
|
105 IF L > 32 THEN PRINT "UM... OK, THIS MIGHT TAKE A BIT."M$
|
|
110 GOSUB 340OPEN
|
|
115 FOR P=1 TO N
|
|
120 P$=""
|
|
125 FOR I=1 TO L
|
|
135 P$=P$+CHR$(FNR(I*(I<5)))
|
|
140 NEXT I
|
|
REM SHUFFLE FIRST 4
|
|
150 FOR I = 1 TO 4
|
|
151 C$=MID$(P$,I,1)
|
|
152 J=INT(RND(1)*L)+1
|
|
153 H$=MID$(P$,J,1)
|
|
154 P$=MID$(P$,1,J-1)+C$+MID$(P$,J+1,L)
|
|
155 P$=MID$(P$,1,I-1)+H$+MID$(P$,I+1,L)
|
|
156 NEXT I
|
|
180 PRINT P$
|
|
185 NEXT P
|
|
190 GOTO 380CLOSE
|
|
|
|
REM *** DISPLAY ***
|
|
200 C = 0
|
|
REM *** OPTIONS ***
|
|
210 HOME
|
|
215 PRINT "PASSWORD GENERATOR"M$M$
|
|
220 PRINT "1. GENERATE "N" PASSWORD"S$(N=1)M$
|
|
225 PRINT "2. DISPLAYED"C$(C=0)M$" OR"
|
|
230 PRINT "3. WRITTEN TO "F$C$(C=1)M$
|
|
235 PRINT "4. SPECIFY THE PASSWORD LENGTH = "L;M$
|
|
240 PRINT "5. SPECIFY THE NUMBER OF PASSWORDS TO"M$TAB(31)"GENERATE"
|
|
245 PRINT "6. SPECIFY A SEED VALUE"M$
|
|
250 PRINT "7. EXCLUDE VISUALLY SIMILAR CHARACTERS"M$
|
|
255 PRINT "8. HELP AND OPTIONS"
|
|
260 RETURN
|
|
|
|
REM *** WRITE TO A FILE ***
|
|
300 C = 1
|
|
310 GOTO 210OPTIONS
|
|
REM *** OPEN A FILE ***
|
|
340 IF NOT C THEN RETURN
|
|
345 PRINT D$"OPEN "F$"
|
|
350 PRINT D$"CLOSE"F$
|
|
355 PRINT D$"DELETE "F$
|
|
360 PRINT D$"OPEN "F$
|
|
365 PRINT D$"WRITE "F$
|
|
370 RETURN
|
|
REM *** CLOSE A FILE ***
|
|
380 IF NOT C THEN RETURN
|
|
385 PRINT D$"CLOSE"F$
|
|
390 RETURN
|
|
|
|
REM *** SET PASSWORD LENGTH ***
|
|
400 PRINT M$
|
|
410 FOR I = 0 TO 1 STEP 0
|
|
420 INPUT "ENTER A NUMBER FROM 4 TO 255 TO SPECIFY THE PASSWORD LENGTH = ";L
|
|
430 IF L >= 4 AND L < 256 THEN RETURN
|
|
440 PRINT "?OUT OF RANGE"
|
|
450 NEXT I
|
|
|
|
REM *** SET NUMBER OF PASSWORDS TO GENERATE ***
|
|
500 PRINT M$
|
|
510 FOR I = 0 TO 1 STEP 0
|
|
520 INPUT "ENTER A NUMBER FROM 1 AND UP TO SPECIFY THE NUMBER OF PASSWORDS TO GENERATE: ";N
|
|
530 IF N >= 1 THEN RETURN
|
|
540 PRINT "?OUT OF RANGE."
|
|
550 NEXT I
|
|
|
|
REM *** SET A SEED VALUE ***
|
|
600 PRINT M$
|
|
610 INPUT "ENTER A SEED VALUE: ";S%
|
|
620 PRINT RND(S%)
|
|
630 RETURN
|
|
|
|
REM *** EXCLUDE ***
|
|
700 PRINT M$
|
|
705 INPUT "ENTER CHARACTERS TO EXCLUDE:";E$
|
|
REM *** GROUPS ***
|
|
REM ALWAYS EXCLUDE BACKSLASH AND BACKTICK (GRAVE)
|
|
710 E$=CHR$(92)+CHR$(96)+E$
|
|
711 FOR G = 1 TO 4
|
|
712 G$(G) = ""
|
|
713 NEXT G
|
|
720 FOR G = 1 TO 2
|
|
721 FOR K = ASC("A") + (G - 1) * 32 TO ASC("Z") + (G - 1) * 32
|
|
722 GOSUB 770ADD
|
|
723 NEXT K, G
|
|
730 FOR K = 33 TO 64
|
|
731 G = 3 + (K < ASC(STR$(0)) OR K > ASC(STR$(9)))
|
|
732 GOSUB 770ADD
|
|
733 NEXT K
|
|
734 FOR K = 91 TO 96
|
|
735 GOSUB 770ADD
|
|
736 NEXT K
|
|
737 FOR K = 123 TO 126
|
|
738 GOSUB 770ADD
|
|
739 NEXT K
|
|
740 G$(0) = ""
|
|
741 FOR G = 1 TO 4
|
|
742 IF LEN(G$(G)) THEN G$(0) = G$(0) + G$(G) : NEXT G : GOTO 800HELP
|
|
743 ?"THERE MUST BE AT LEAST ONE CHARUNRACTER IN EACH GROUP"
|
|
744 GOTO 705
|
|
REM *** DEFAULT (QUICK) ***
|
|
750 G$(1)="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
751 FOR I=97TO122:G$(2)=G$(2)+CHR$(I):NEXT
|
|
753 G$(3)="0123456789"
|
|
754 G$(4)="!"+CHR$(34)+"#$%&'()*+,-./:;<=>?@"+CHR$(91)+"]^"+CHR$(95)
|
|
755 FOR I=123TO126:G$(4)=G$(4)+CHR$(I):NEXTI
|
|
756 G$(0)=G$(0)+G$(1)+G$(2)+G$(3)
|
|
757 GOTO 210OPTIONS
|
|
REM *** ADD TO GROUP
|
|
770 C$ = CHR$(K)
|
|
775 FOR E = 1 TO LEN(E$)
|
|
780 IF C$ <> MID$(E$,E,1) THEN NEXT E : G$(G)=G$(G)+C$ : ?C$;
|
|
790 RETURN
|
|
|
|
REM *** HELP ***
|
|
800 HOME
|
|
805 PRINT "GENERATE PASSWORDS CONTAINING RANDOM"
|
|
810 PRINT "ASCII CHARACTERS FROM THESE GROUPS:"M$
|
|
815 PRINT " LOWERCASE UPPERCASE DIGIT OTHER"M$
|
|
820 PRINT " "LEFT$(G$(2),9)TAB(13)LEFT$(G$(1),9)TAB(23)LEFT$(G$(3),5)TAB(29)LEFT$(G$(4),11)
|
|
825 PRINT " "MID$(G$(2),10,9)TAB(13)MID$(G$(1),10,9)TAB(23)MID$(G$(3),6,5)TAB(29)MID$(G$(4),12,11)
|
|
826 PRINT " "MID$(G$(2),19,9)TAB(13)MID$(G$(1),19,9)TAB(29)MID$(G$(4),23,15)M$
|
|
840 PRINT "YOU MAY CHOOSE THE PASSWORD LENGTH, AND"
|
|
845 PRINT "HOW MANY PASSWORDS TO GENERATE. IT IS"
|
|
850 PRINT "ENSURED THAT THERE IS AT LEAST ONE"
|
|
855 PRINT "CHARACTER FROM EACH OF THE GROUPS IN"
|
|
860 PRINT "EACH PASSWORD. THERE IS AN OPTION TO"
|
|
865 PRINT "EXCLUDE VISUALLY SIMILAR CHARACTERS."
|
|
870 RETURN
|
|
|
|
REM *** QUIT ***
|
|
900 Q = 1
|
|
910 VTAB 23
|
|
920 RETURN
|