DECLARE FUNCTION Decrypted$ (t$, m!, n!)
DECLARE FUNCTION Encrypted$ (t$, m!, n!)
DECLARE FUNCTION NoLowAscii! (t$)
DECLARE FUNCTION Revers$ (txt$)
DECLARE FUNCTION BIN$ (n!)
ON ERROR GOTO HELP
's$ = COMMAND$
s$ = "dde.inc dde.dec 1 2"
IF s$ = "" THEN GOTO HELP
cntr = INSTR(s$, " ")
p1$ = MID$(s$, 1, cntr - 1)
cntr1 = INSTR(cntr + 1, s$, " ")
p2$ = MID$(s$, cntr + 1, cntr1 - cntr - 1)
cntr = cntr1
cntr1 = INSTR(cntr1 + 1, s$, " ")
p3 = VAL(MID$(s$, cntr + 1, cntr1 - cntr))
cntr = cntr1
cntr1 = LEN(s$)
p4 = VAL(MID$(s$, cntr + 1, cntr1 - cntr))
IF UCASE$(p1$) = UCASE$(p2$) THEN GOTO HELP
IF p3 < 4 THEN PRINT "Encrypting "; UCASE$(p1$); "...";  ELSE PRINT "Decrypting "; UCASE$(p1$); "...";
OPEN p1$ FOR BINARY AS #1
OPEN p2$ FOR BINARY AS #2
IF LOF(2) > 0 THEN CLOSE 2: KILL p2$: OPEN p2$ FOR BINARY AS #2
DIM gg AS STRING * 100
FOR q = 0 TO LOF(1)
GET #1, , gg
IF LEN(gg) + q > LOF(1) THEN g$ = MID$(gg, 1, (LEN(gg) + q) - LOF(1)) ELSE g$ = gg
IF p3 < 4 THEN bg$ = Encrypted$(g$, p3, p4) ELSE bg$ = Decrypted$(g$, p3 - 3, p4)
PUT #2, , bg$
q = q + LEN(g$)
NEXT q
CLOSE 1, 2
PRINT ".Done"
END
HELP:
PRINT "Encrypt"
PRINT "Syntax: "
PRINT "        ENCRYPT infile outfile method key"
PRINT
PRINT " infile  - The file to be incrypted."
PRINT " outfile - The new encrypted file."
PRINT " method  - The encryption method to use [1|2|3|4|5|6]."
PRINT " key     - The encryption key (the higest value is based on the method)."
END
Invaild:

RESUME NEXT

FUNCTION BIN$ (n)
ff$ = HEX$(n)
FOR q = 1 TO LEN(ff$)
IF MID$(ff$, q, 1) = "0" THEN gg$ = gg$ + "0000"
IF MID$(ff$, q, 1) = "1" THEN gg$ = gg$ + "0001"
IF MID$(ff$, q, 1) = "2" THEN gg$ = gg$ + "0010"
IF MID$(ff$, q, 1) = "3" THEN gg$ = gg$ + "0011"
IF MID$(ff$, q, 1) = "4" THEN gg$ = gg$ + "0100"
IF MID$(ff$, q, 1) = "5" THEN gg$ = gg$ + "0101"
IF MID$(ff$, q, 1) = "6" THEN gg$ = gg$ + "0110"
IF MID$(ff$, q, 1) = "7" THEN gg$ = gg$ + "0111"
IF MID$(ff$, q, 1) = "8" THEN gg$ = gg$ + "1000"
IF MID$(ff$, q, 1) = "9" THEN gg$ = gg$ + "1001"
IF MID$(ff$, q, 1) = "A" THEN gg$ = gg$ + "1010"
IF MID$(ff$, q, 1) = "B" THEN gg$ = gg$ + "1100"
IF MID$(ff$, q, 1) = "C" THEN gg$ = gg$ + "1100"
IF MID$(ff$, q, 1) = "D" THEN gg$ = gg$ + "1101"
IF MID$(ff$, q, 1) = "E" THEN gg$ = gg$ + "1110"
IF MID$(ff$, q, 1) = "F" THEN gg$ = gg$ + "1111"
NEXT q
BIN$ = gg$
END FUNCTION

FUNCTION Decrypted$ (t$, m, n)
t$ = Revers$(t$)
ON ERROR GOTO Invaild
Stp = m + 1
IF m = 3 THEN Stp = 4
FOR q = 1 TO LEN(t$) STEP Stp
IF m = 1 THEN xx$ = HEX$(ASC(MID$(t$, q, 1)) / n) + HEX$(ASC(MID$(t$, q + 1, 1)) / n): xOutx$ = xOutx$ + CHR$(VAL("&H" + xx$))
IF m = 2 THEN xx$ = RTRIM$(LTRIM$(STR$(ASC(MID$(t$, q, 1)) / n))) + RTRIM$(LTRIM$(STR$(ASC(MID$(t$, q + 1, 1)) / n))) + RTRIM$(LTRIM$(STR$(ASC(MID$(t$, q + 2, 1)) / n))): xOutx$ = xOutx$ + CHR$(VAL(xx$))
IF m = 3 THEN
xx$ = ""
FOR z = 0 TO 3
ax$ = RTRIM$(LTRIM$(STR$(VAL(LTRIM$(STR$(ASC(MID$(t$, q + z, 1)) / n))))))
xx$ = xx$ + STRING$(2 - LEN(ax$), "0") + ax$: ax$ = ""
NEXT z
xOutx$ = xOutx$ + CHR$(VAL("&B" + LTRIM$(xx$)))
END IF
NEXT q
Decrypted$ = xOutx$
END FUNCTION

'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'Encypting Scheme with 3 methods (m) 
' 1 = Double Size                    
' 2 = Triple Size                    
' 3 = 6x Size                        
'EIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
FUNCTION Encrypted$ (t$, m, n)
FOR q = 1 TO LEN(t$)
IF m = 1 THEN xx$ = STRING$(2 - LEN(HEX$(ASC(MID$(t$, q, 1)))), "0") + HEX$(ASC(MID$(t$, q, 1)))
IF m = 2 THEN xx$ = STRING$(3 - LEN(RTRIM$(LTRIM$(STR$(ASC(MID$(t$, q, 1)))))), "0") + RTRIM$(LTRIM$(STR$(ASC(MID$(t$, q, 1)))))
IF m = 3 THEN xx$ = STRING$(8 - LEN(RTRIM$(LTRIM$(BIN$(CINT(ASC(MID$(t$, q, 1))))))), "0") + RTRIM$(LTRIM$(BIN$(ASC(MID$(t$, q, 1)))))
IF m = 1 THEN xOutx$ = xOutx$ + CHR$(VAL("&H" + MID$(xx$, 1, 1)) * n) + CHR$(VAL("&H" + MID$(xx$, 2, 1)) * n)
IF m = 2 THEN xOutx$ = xOutx$ + CHR$(VAL(MID$(xx$, 1, 1)) * n) + CHR$(VAL(MID$(xx$, 2, 1)) * n) + CHR$(VAL(MID$(xx$, 3, 1)) * n)
IF m = 3 THEN
xx$ = MID$(xx$, 1, 8)
FOR z = 1 TO LEN(xx$) STEP 2
xOutx$ = xOutx$ + CHR$(VAL(MID$(xx$, z, 2)) * n)
'? xOutx$;" xOutx$"
'? xx$; " xx$"
NEXT z
END IF
NEXT q
Encrypted$ = Revers$(xOutx$)
END FUNCTION

FUNCTION NoLowAscii (t$)
FOR q = 0 TO 31
'IF ASC(MID$(t$, q, 1)) = 13 THEN dd = 1
'IF ASC(MID$(t$, q, 1)) < 32 AND dd = 0 THEN NoLowAscii = 0: EXIT FUNCTION
'dd = 0
IF INSTR(t$, CHR$(q)) = 0 = 0 = -1 = -1 THEN dd = 1
NEXT q
IF dd = 1 THEN NoLowAscii = 0 ELSE NoLowAscii = 1
END FUNCTION

FUNCTION Revers$ (txt$)
IF txt$ = "" THEN EXIT FUNCTION
FOR q = LEN(txt$) TO 1 STEP -1
tt$ = tt$ + MID$(txt$, q, 1)
NEXT q
Revers$ = tt$
END FUNCTION

