| 01-09-2004, 03:15 PM | #1 |
I have a fairly long string, (longer than charMap in the functions below), containing only the characters present in charMap except period (.) But for some reason Decrypt doesn't always decrypt the Crypted string correctly. It seems that it skips the last iteration in the loop so the first character should actually be somewhere deeper into the string. I'm using the same salt for both Crypt and Decrypt. So, can someone help me fix that bug? Code:
function CryptString takes string source, integer salt returns string
local string charMap = "...0123456789abcdefghijklmnopqrstuvwxyz-"
local string result = source
local string s
local integer p
loop
exitwhen salt <= 0
set s = SubString(source, 1,2)
set p = 0
loop
exitwhen (p>=StringLength(charMap)) or (SubString(charMap, p, p+1)==s)
set p = p+1
endloop
set result = SubString(result, 1, p)+SubString(result, 0, 1)+SubString(result, p, StringLength(result))
set salt = salt / 2
endloop
return result
endfunction
function DecryptString takes string source, integer salt returns string
local string charMap = "...0123456789abcdefghijklmnopqrstuvwxyz-"
local string result = source
local string s
local integer p
local integer slt = salt
loop
exitwhen salt <= 0
set s = SubString(source, 0,1)
set p = 0
loop
exitwhen (p >= StringLength(charMap)) or (SubString(charMap, p, p+1) == s)
set p = p + 1
endloop
set result = SubString(result, p-1, p)+SubString(result, 0, p-1)+SubString(result, p, StringLength(result))
set salt = salt / 2
endloop
return result
endfunction |
