home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 16
/
CD_ASCQ_16_0994.iso
/
news
/
4609
/
ktencode
/
ktencode.txt
< prev
next >
Wrap
Text File
|
1994-06-22
|
5KB
|
217 lines
'Programmed by Karl Albrecht (KARL25@AOL.COM)
Function KTEncrypt (ByVal PASSWORD$, ByVal strng$, Flag%, Errors$)
'Dimension the Adjust array
ReDim Adjust(4)
'Set error capture routine
On Local Error GoTo ErrorHandler
'Preserve original string
original$ = strng$
'Check for errors (Errorcodes are custom)
'Is there Password??
If Len(PASSWORD$) = 0 Then Error 31100
'Is there a strng$ to work with?
If Len(strng$) = 0 Then Error 31110
'Check to see if it is an encoded file
If Right$(strng$, 5) = String$(5, 255) Then
'if encoding warn!
If Flag% = 0 Then Error 31120
Else
'If decoding warn
If Flag% <> 0 Then Error 31130
End If
'Create a four part encryption code based on password
'First Adjust code based on length of password
Adjust(1) = Len(PASSWORD$)
'If first character ascii code even make adjust negative
If Asc(Left$(PASSWORD$, 1)) / 2 = Int(Asc(Left$(PASSWORD$, 1)) / 2) Then
Adjust(1) = Adjust(1) * -1
End If
'Second Adjust code based on first and last character ascii codes
Adjust(2) = Asc(Left$(PASSWORD$, 1)) - Asc(Right$(PASSWORD$, 1))
'Third code based on average of all ascii codes
TotalAscii = 0
For Looper = 1 To Len(PASSWORD$)
TotalAscii = TotalAscii + Asc(Mid$(PASSWORD$, Looper, 1))
Next Looper
Adjust(3) = Int(TotalAscii / Len(PASSWORD$) / 3)
'Fourth code based on previous three
Adjust(4) = Adjust(1) + Adjust(2) + Adjust(3)
'Now check if any Adjust codes are zero
'If it is zero make it not zero (any number is fine!)
For Looper = 1 To 4
If Adjust(Looper) = 0 Then Adjust(Looper) = Looper + Len(PASSWORD$)
Next Looper
'Now check if any adjusts are the same
NotYet% = 1
Do While NotYet%
NotYet% = 0
For Loop1 = 1 To 4
For Loop2 = 1 To 4
'Don't compare same items
If Loop1 <> Loop2 Then
'Check for a match
If Adjust(Loop1) = Adjust(Loop2) Then
Adjust(Loop2) = Adjust(Loop2) + Len(PASSWORD$)
'Make sure we didn't make it zero
If Adjust(Loop2) = 0 Then Adjust(2) = Adjust(Loop2) + Len(PASSWORD$)
NotYet% = 1
End If
End If
Next Loop2
Next Loop1
Loop
'Encode or deocde
Counts = 0: Looper = 0
'Loop until scanned though the whole file
Do While Looper < Len(strng$)
'Add to Looper
Looper = Looper + 1
'Keep Adjust code Counts from 1 to 4
Counts = Counts + 1
If Counts = 5 Then Counts = 1
'Get the character to change
ToChange = Asc(Mid$(strng$, Looper, 1))
'ENCODE Flag%=0
If Flag% = 0 Then
'If adjustment to high or low then reverse the coding and
'add in a chr$(255) to mark the change
If ToChange - Adjust(Counts) < 1 Or ToChange - Adjust(Counts) > 254 Then
Addin$ = Chr$(255) + Chr$(ToChange + Adjust(Counts))
strng$ = Left$(strng$, Looper - 1) + Addin$ + Mid$(strng$, Looper + 1)
Looper = Looper + 1
'If adjustment OK then just cahnge the character
Else
Mid$(strng$, Looper, 1) = Chr$(ToChange - Adjust(Counts))
End If
'DECODE Flag% <> 0
Else
'If find a CHR$(255) then remove it and set Flag255% to
'ensure reverse codes on next pass reverse coding
If ToChange = 255 Then
strng$ = Left$(strng$, Looper - 1) + Mid$(strng$, Looper + 1)
Flag255% = 1
'Since CHR$(255) was removed we need to back up Looper
'and Counts because characters all shifted to the left
Looper = Looper - 1
Counts = Counts - 1
'If not CHR$(255) then decode watching if Flag255% is set
Else
If Flag255% = 1 Then
Mid$(strng$, Looper, 1) = Chr$(ToChange - Adjust(Counts))
Flag255% = 0
Else
Mid$(strng$, Looper, 1) = Chr$(ToChange + Adjust(Counts))
End If
End If
End If
Loop
'Set function equal to changed string
If Flag% = 0 Then
'Tack on CHR$(255) to end so it can be recognized as encoded
KTEncrypt = strng$ + String$(5, 255)
Else
KTEncrypt = strng$
End If
'Make sure Errors$ is cleared
Errors$ = ""
Exit Function
ErrorHandler:
Select Case Err
'Illegal Function Call --> out of range ASCII code
Case 5
Errors$ = "INVALID PASSWORD!"
'Is there Password??
Case 31100
Errors$ = "NO PASSWORD!"
'Is there a strng$ to work with?
Case 31110
Errors$ = "NO STRING!"
'Encoding a encoded file?
Case 31120
If UCase$(Errors$) = "FORCE" Then
Resume Next
Else
Errors$ = "FILE ALREADY ENCODED!"
End If
'Decoding a non-encoded file?
Case 31130
If UCase$(Errors$) = "FORCE" Then
Resume Next
Else
Errors$ = "FILE NOT ENCODED!"
End If
'Unanticipated
Case Else
Errors$ = Error$(Err)
End Select
KTEncrypt = original$
Exit Function
End Function