home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4609 / ktencode / quickbas.bas < prev    next >
BASIC Source File  |  1994-06-22  |  6KB  |  257 lines

  1. 'This function has been modified to work in QuickBASIC.  This function
  2. 'was originally designed in VISUAL BASIC for WINDOWS 3.0 and was modified
  3. 'for use in QuickBASIC.  There were a few changes but everything works
  4. 'as described in the READTHIS.TXT file.
  5.  
  6. 'This is just a simple DEMO program to try the function.  Have fun!
  7. 'Programmed by Karl D Albreckt  (KARL25@AOL.COM)
  8. 'Please read the READTHIS.TXT file!
  9. 'Thank you
  10.  
  11.  
  12. DECLARE FUNCTION KTEncrypt$ (password$, strng$, Flag%, Errors$)
  13. Msg$ = "Hello, this is a test string to scramble."
  14.  
  15. CommandLoop:
  16.  
  17. CLS
  18. PRINT Msg$
  19. PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
  20. PRINT STRING$(80, "-");
  21. LINE INPUT "PASSWORD:"; password$
  22. PRINT "0 - Encode  or  1 - Decode"
  23. OK = 0
  24. DO WHILE OK = 0
  25.   a$ = INKEY$
  26.   IF a$ = "1" OR a$ = "0" THEN OK = 1
  27. LOOP
  28. which% = VAL(a$)
  29.  
  30. Msg$ = KTEncrypt$(password$, Msg$, which%, Errors$)
  31. IF Errors$ <> "" THEN
  32.   BEEP
  33.  
  34.   PRINT : PRINT : PRINT "            " + Errors$
  35.   PRINT : PRINT " Press any key"
  36.   a$ = INPUT$(1)
  37. END IF
  38.  
  39. GOTO CommandLoop
  40.  
  41. 'Programmed by Karl Albrecht (KARL25@AOL.COM)
  42. FUNCTION KTEncrypt$ (password$, original$, Flag%, Errors$)
  43.   
  44.   'Dimension the Adjust array
  45.   REDIM Adjust(4)
  46.   
  47.   'Set error capture routine
  48.   ON LOCAL ERROR GOTO ErrorHandler
  49.  
  50.   'Preserve original string and work on strng$
  51.   strng$ = original$
  52.  
  53.   
  54.   
  55.   'Check for errors (Errorcodes are custom)
  56.   'Is there Password??
  57.   IF LEN(password$) = 0 THEN ERROR 100
  58.   
  59.   'Is there a strng$ to work with?
  60.   IF LEN(strng$) = 0 THEN ERROR 110
  61.  
  62.   'Check to see if it is an encoded file
  63.   IF RIGHT$(strng$, 5) = STRING$(5, 255) THEN
  64.     'if encoding warn!
  65.     IF Flag% = 0 THEN ERROR 120
  66.   ELSE
  67.     'If decoding warn
  68.     IF Flag% <> 0 THEN ERROR 130
  69.   END IF
  70.   
  71.  
  72.   
  73.   'Create a four part encryption code based on password
  74.   'First Adjust code based on length of password
  75.   Adjust(1) = LEN(password$)
  76.   
  77.   'If first character ascii code even make adjust negative
  78.   IF ASC(LEFT$(password$, 1)) / 2 = INT(ASC(LEFT$(password$, 1)) / 2) THEN
  79.     Adjust(1) = Adjust(1) * -1
  80.   END IF
  81.  
  82.   'Second Adjust code based on first and last character ascii codes
  83.   Adjust(2) = ASC(LEFT$(password$, 1)) - ASC(RIGHT$(password$, 1))
  84.  
  85.   'Third code based on average of all ascii codes
  86.   TotalAscii = 0
  87.   FOR Looper = 1 TO LEN(password$)
  88.     TotalAscii = TotalAscii + ASC(MID$(password$, Looper, 1))
  89.   NEXT Looper
  90.   Adjust(3) = INT(TotalAscii / LEN(password$) / 3)
  91.  
  92.   'Fourth code based on previous three
  93.   Adjust(4) = Adjust(1) + Adjust(2) + Adjust(3)
  94.  
  95.   
  96.   
  97.   'Now check if any Adjust codes are zero
  98.   'If it is zero make it not zero (any number is fine!)
  99.   FOR Looper = 1 TO 4
  100.     IF Adjust(Looper) = 0 THEN Adjust(Looper) = Looper + LEN(password$)
  101.   NEXT Looper
  102.  
  103.   
  104.   'Now check if any adjusts are the same
  105.   NotYet% = 1
  106.   DO WHILE NotYet%
  107.     NotYet% = 0
  108.     FOR Loop1 = 1 TO 4
  109.       FOR Loop2 = 1 TO 4
  110.         'Don't compare same items
  111.         IF Loop1 <> Loop2 THEN
  112.           
  113.           'Check for a match
  114.           IF Adjust(Loop1) = Adjust(Loop2) THEN
  115.             Adjust(Loop2) = Adjust(Loop2) + LEN(password$)
  116.             
  117.             'Make sure we didn't make it zero
  118.             IF Adjust(Loop2) = 0 THEN Adjust(2) = Adjust(Loop2) + LEN(password$)
  119.             
  120.             NotYet% = 1
  121.           END IF
  122.  
  123.         END IF
  124.       NEXT Loop2
  125.     NEXT Loop1
  126.   LOOP
  127.  
  128.  
  129.   
  130.   
  131.   'Encode or deocde
  132.   Counts = 0: Looper = 0
  133.  
  134.   'Loop until scanned though the whole file
  135.   DO WHILE Looper < LEN(strng$)
  136.     
  137.     'Add to Looper
  138.     Looper = Looper + 1
  139.  
  140.     'Keep Adjust code Counts from 1 to 4
  141.     Counts = Counts + 1
  142.     IF Counts = 5 THEN Counts = 1
  143.     
  144.     'Get the character to change
  145.     ToChange = ASC(MID$(strng$, Looper, 1))
  146.     
  147.     'ENCODE   Flag%=0
  148.     IF Flag% = 0 THEN
  149.       
  150.       'If adjustment to high or low then reverse the coding and
  151.       'add in a chr$(255) to mark the change
  152.       IF ToChange - Adjust(Counts) < 1 OR ToChange - Adjust(Counts) > 254 THEN
  153.         
  154.         Addin$ = CHR$(255) + CHR$(ToChange + Adjust(Counts))
  155.         strng$ = LEFT$(strng$, Looper - 1) + Addin$ + MID$(strng$, Looper + 1)
  156.         Looper = Looper + 1
  157.       
  158.       'If adjustment OK then just cahnge the character
  159.       ELSE
  160.         
  161.         MID$(strng$, Looper, 1) = CHR$(ToChange - Adjust(Counts))
  162.  
  163.       END IF
  164.  
  165.     'DECODE  Flag% <> 0
  166.     ELSE
  167.       
  168.       'If find a CHR$(255) then remove it and set Flag255% to
  169.       'ensure reverse codes on next pass reverse coding
  170.       IF ToChange = 255 THEN
  171.         
  172.         strng$ = LEFT$(strng$, Looper - 1) + MID$(strng$, Looper + 1)
  173.         Flag255% = 1
  174.         'Since CHR$(255) was removed we need to back up Looper
  175.         'and Counts because characters all shifted to the left
  176.         Looper = Looper - 1
  177.         Counts = Counts - 1
  178.       
  179.       'If not CHR$(255) then decode watching if Flag255% is set
  180.       ELSE
  181.         IF Flag255% = 1 THEN
  182.           MID$(strng$, Looper, 1) = CHR$(ToChange - Adjust(Counts))
  183.           Flag255% = 0
  184.         ELSE
  185.           MID$(strng$, Looper, 1) = CHR$(ToChange + Adjust(Counts))
  186.         END IF
  187.       END IF
  188.  
  189.     END IF
  190.     
  191.   LOOP
  192.  
  193.   
  194.   
  195.   
  196.   'Set function equal to changed string
  197.   IF Flag% = 0 THEN
  198.     
  199.     'Tack on CHR$(255) to end so it can be recognized as encoded
  200.     KTEncrypt$ = strng$ + STRING$(5, 255)
  201.  
  202.   ELSE
  203.     
  204.     KTEncrypt$ = strng$
  205.   
  206.   END IF
  207.  
  208.   'Make sure Errors$ is cleared
  209.   Errors$ = ""
  210.  
  211.   EXIT FUNCTION
  212.  
  213.  
  214.  
  215. ErrorHandler:
  216.   SELECT CASE ERR
  217.  
  218.     'Illegal Function Call --> out of range ASCII code
  219.     CASE 5
  220.       Errors$ = "INVALID PASSWORD!"
  221.  
  222.     'Is there Password??
  223.     CASE 100
  224.       Errors$ = "NO PASSWORD!"
  225.       
  226.     'Is there a strng$ to work with?
  227.     CASE 110
  228.       Errors$ = "NO STRING!"
  229.  
  230.     'Encoding a encoded file?
  231.     CASE 120
  232.       IF UCASE$(Errors$) = "FORCE" THEN
  233.         RESUME NEXT
  234.       ELSE
  235.         Errors$ = "FILE ALREADY ENCODED!"
  236.       END IF
  237.  
  238.     'Decoding a non-encoded file?
  239.     CASE 130
  240.       IF UCASE$(Errors$) = "FORCE" THEN
  241.         RESUME NEXT
  242.       ELSE
  243.         Errors$ = "FILE NOT ENCODED!"
  244.       END IF
  245.     
  246.     'Unanticipated
  247.     CASE ELSE
  248.       Errors$ = STR$(ERR)
  249.  
  250.   END SELECT
  251.   
  252.   KTEncrypt$ = original$
  253.   EXIT FUNCTION
  254.  
  255. END FUNCTION
  256.  
  257.