|
Is a tiny DOS stand alone application, with only 30 KBytes size, which encrypt/decrypt any kind of files.
It uses a very safe and fast csprng algorithm on stream cipher, and erase files permanently. Bellow is an explanation how it works. From the left
to right, the first column is
the list with the filenames, the second is the extension, and the right one
is the correspondent file sizes in Bytes. Grey lines are the files not
encrypted; white line is the file selected to encrypt; bright red line is the
file selected to decrypt. Red lines are files already encrypted by Alvo. This application uses 2^157
key. |
|
|
Up
arrow - Move Up one file Down
arrow - Move Down one file Insert -
Show/Hide password PageUp -
Move Up 19 files PegeDw -
Move Down 19 files Home -
Go to first file End -
Go to last file Any
character - Alphabetic selection Enter -
Choose the file Esc -
Backward until exit |
|
|
Select a file using the above keys and press Enter on the bright line, e.g. TEST.TXT.
After that you can write your key to encrypt/decrypt the selected file. Write the key, simply by pressing the characters. The key must have 24
characters long. As you write it you will see only (*). To show or hide the
password use Insert.
After that press Enter and the file will be start to
encrypt/decrypt. On the right of the
file size, is showed the encrypt/decrypt evolution process. |
|
|
After the encrypt process the white line will be changed to bright red,
meaning the file was encrypted by Alvo.
To decrypt the file, do the same way with the original key. To decrypt a
file, choose a red line, and press Enter. Write the original key and press Enter Again. After that, and if the key is
correct, the file is decrypted. |
|
|
To erase a file, press Warning: The
key is case sensitive, and before encrypt a file, memorize it, on contrary,
you loose it for ever. |
|
Here is the
source code in PowerBasic:
|
SCREEN 0 CLS COLOR 11,3 FOR i%=1 to 3 LOCATE i%,1:PRINT SPACE$(80); LOCATE 22+i%,1:PRINT SPACE$(80); NEXT LOCATE 2,3:print LEFT$(CURDIR$,78) LOCATE 24,75:print "ALVO"; DEFQUD n ,s DEFEXT x,c,b mt%=4000 DIM
nomefich$(mt%),w%(mt%),nomefich2$(mt%),size(mt%) ph%=16384 FINDFILES:
'----------------------------------------------------------- pf%=1:pa%=1 LOCATE 24,3,0:PRINT
"Reading files..."; COLOR 7,0 fa$=DIR$
("*.*") DO WHILE NOT fa$="" OPEN fa$ FOR BINARY AS #1 IF LOF(1)>7 THEN INCR mf% nomefich$(mf%)=fa$ size(mf%)=LOF(1) pn%=0 SEEK #1,LOF(1)-4 GET$ #1,4,ww$ IF ww$="Alvo" THEN
w%(mf%)=1:DECR size(mf%),4 pn%=INSTR(fa$,".")-1 IF pn%>0 THEN ex$=RIGHT$(fa$,LEN(fa$)-pn%-1) nm%=3-LEN(ex$) ex$=ex$+SPACE$(nm%) END IF IF pn%>0 THEN
nomefich2$(mf%)=LEFT$(fa$,pn%)+SPACE$(10-LEN(LEFT$(fa$,pn%)))+ex$ ELSE
nomefich2$(mf%)=fa$+SPACE$(13-LEN(fa$)) nomefich2$(mf%)=nomefich2$(mf%)+USING$("#,###,###,###,###",size(mf%)) IF mf%<19 THEN lim%=mf%-1 ELSE
lim%=18 if mf%<20 THEN COLOR ,0:GOSUB lista END IF CLOSE #1 fa$=DIR$ COLOR ,3:LOCATE 24,3,0:PRINT SPACE$(17); pf%=1:pa%=1 NOVO:
'-------------------------------------------------------------------- COLOR ,0 IF mf%=0 THEN nofiles GOSUB LISTA DO DO K$=UCASE$(INKEY$) LOOP UNTIL K$<>"" IF K$=CHR$(27) THEN CLS:COLOR
15,0:LOCATE ,,0:END COLOR ,3:LOCATE 24,3:PRINT
SPACE$(20);:COLOR,0 IF LEN(k$)=2 THEN ky$=RIGHT$(k$,1) IF Ky$="S" THEN GOSUB DELETA IF Ky$="H" THEN decr pa% IF Ky$="P" THEN incr pa% if pa%>lim%+1 then pa%=lim%+1:incr
pf% if pa%<1 then pa%=1:decr pf% IF Ky$="G" THEN pf%=1:pa%=1 IF Ky$="O" THEN
pf%=mf%-lim%:pa%=lim%+1 IF Ky$="I" THEN DECR
pf%,lim%+1 IF Ky$="Q" THEN INCR
pf%,lim%+1 IF pf%>mf%-lim%-1 THEN pf%=mf%-lim% IF pf%<1 THEN pf%=1 'IF ky$="S" THEN NOVO END IF IF ASC(k$)>13 AND ASC(k$)<123 THEN
GOSUB ALFA GOSUB LISTA IF k$=CHR$(13) THEN CLOSE #1 OPEN nomefich$(pf%+pa%-1) FOR BINARY AS
#1 GOSUB VALOR GOTO CHAVE END IF CHAVE: '------------------------------------------------------------------- pc%=0 keyy$="" keyys$="" mostra%=-1 CHAV: COLOR cor1%:LOCATE PA%+3,34,1:PRINT keyys$; DO DO K$=INKEY$ LOOP UNTIL K$<>"" IF LEN(K$)=2 THEN IF RIGHT$(K$,1)="R" THEN
mostra%=mostra%*-1 GOTO MOSTRAR END IF COLOR ,3:LOCATE 24,3:PRINT SPACE$(20); COLOR ,0:LOCATE PA%+3,34,1:PRINT keyys$; IF K$=CHR$(27) THEN novo IF K$=CHR$(13) AND pc%<18 THEN men$="Short key" IF pc%=0 THEN men$="No key" LOCATE 24,3,0:COLOR 11,3:PRINT
men$;:COLOR ,0:GOTO CHAV END IF IF K$=CHR$(13) THEN c=(CVQ(LEFT$(keyy$,8))+9223372036854775808)/2^64 x=(CVQ(MID$(keyy$,9,8))+9223372036854775808)/2^64 b=(CVQ(RIGHT$(keyy$,8))+9223372036854775808)/2^64 keyy$=SPACE$(24):keyy$="" GOTO crypta END IF IF ASC(K$)>31 AND ASC(K$)<127 AND
pc%<24 THEN keyy$=keyy$+k$ IF ASC(K$)=8 AND pc%>0 THEN
keyy$=LEFT$(keyy$,pc%-1) MOSTRAR: pc%=LEN(keyy$) IF mostra%=-1 then
keyys$=STRING$(pc%,"*") ELSE keyys$=keyy$ LOCATE ,34,1:PRINT keyys$;" "; LOCATE ,34,1: PRINT keyys$; CRYPTA: '---------------------
encripta/decripta ----------------- COLOR cor1% LOCATE ,34,0 PRINT SPACE$(45); FOR n=0 TO tf2-1 STEP ph% LOCATE ,34:PRINT
STRING$(INT(n/q),"|"); GET$ #1,ph%,z$ FOR m%=1 to ph% STEP 8 x=.9999*FRAC(x*(x+m%+b)+c) MID$(z$,m%,8)=MKQ$(CVQ(MID$(z$,m%,8))
XOR INT(x*18446744073709551616-9223372036854775808)) NEXT ON ERROR RESUME NEXT SEEK #1,n PUT$ #1, z$ IF ERR=75 THEN GOSUB ERRO NEXT GET$ #1,f%+1,z$ FOR m%=1 TO f%+1 LOCATE ,34:PRINT
STRING$(INT((n+m%)/q),"|"); x=.9999*FRAC(x*(x+m%+b)+c) MID$(z$,m%,1)=CHR$(ASC(MID$(z$,m%,1))
XOR INT(x*256)) NEXT SEEK #1,tf2 PUT$ #1,z$ IF w%(pf%+pa%-1)=0 THEN PUT$
#1,"Alvo":w%(pf%+pa%-1)=1:GOTO sai FOR i%=1 TO 4 PUT$ #1,"" NEXT w%(pf%+pa%-1)=0 SAI: CLOSE #1 GOTO novo: ALFA:
'----------------------------------------------------------------- FOR ial%=1 TO mf% IF LEFT$(nomefich$(ial%),1)=k$ THEN IF ial%<=lim% THEN
pf%=1:pa%=ial%:RETURN IF ial%>lim% THEN
pf%=ial%-lim%:pa%=lim%+1:RETURN END IF NEXT RETURN LISTA: '
---------------------------------------------------------------- FOR i%=0 TO lim% IF w%(pf%+i%)=1 THEN cor%=4 ELSE cor%=8 IF i%+1=pa% THEN cor%=15:cor1%=15:IF
w%(pf%+i%)=1 THEN cor%=12:cor1%=12 LOCATE i%+4,2,0:PRINT SPACE$(78); COLOR cor%:LOCATE
i%+4,3:PRINT nomefich2$(pf%+i%); NEXT IF lim%<18 THEN FOR i%=lim%+5 TO 22 LOCATE i%,2:PRINT SPACE$(50); NEXT END IF RETURN DELETA: '
---------------------------------------------------------------- IF mf%=0 THEN NOFILES CLOSE #1 OPEN nomefich$(pf%+pa%-1) FOR BINARY AS
#1 GOSUB VALOR LOCATE ,35:PRINT
"Del"; DO K$=RIGHT$(UCASE$(INKEY$),1) IF K$="S" THEN EXIT LOOP IF k$<>"" THEN RETURN IF f%>0 THEN FOR n=0 TO tf2-1 STEP ph% LOCATE ,35+INT(n/q):PRINT "|"; ON ERROR RESUME NEXT PUT$ #1,SPACE$(ph%) IF ERR=75 THEN GOSUB ERRO NEXT END IF PUT$ #1,SPACE$(ph%) CLOSE #1 KILL nomefich$(pf%+pa%-1) LOCATE ,3:PRINT SPACE$(77); DECR mf% IF mf%=0 THEN NOFILES FOR i%=pf%+pa%-1 TO mf% nomefich$(i%)=nomefich$(i%+1) nomefich2$(i%)=nomefich2$(i%+1) size(i%)=size(i%+1) w%(i%)=w%(i%+1) NEXT IF mf%<lim%+1 THEN DECR lim% IF pf%+pa%=mf%+2 THEN DECR pf% RETURN novo VALOR:
'------------------------------------------------------------------- LOCATE pa%+3,,0 COLOR cor1% nfl=size(pf%+pa%-1) tf=nfl-1 tf2=INT(tf/ph%)*ph% f%=tf-tf2 q=tf/45 RETURN NOFILES:
'--------------------------------------------------------------- COLOR ,3 LOCATE 24,2,0:PRINT
" No files. Esc to exit"; DO K$=INKEY$ LOOP UNTIL K$=CHR$(27) COLOR 15,0 CLS END ERRO: IF ERR=75 THEN men$="File already open" LOCATE 24,3,0:COLOR 11,3:PRINT
men$;:COLOR ,0:GOTO novo END IF RETURN |
October 2009 - Ribeiro Alvo