May 04, 2024, 06:38:41 AM

News:

Own IWBasic 2.x ? -----> Get your free upgrade to 3.x now.........


String encryption

Started by zaphod, November 14, 2009, 02:17:48 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

zaphod

Hello,

I have ported to EB, 3 strings encryption routines: PC1, XOR, RC4
Here the code :



'
'EB string cipher port
'by Z@ph0d - 14 nov 2009
'
'console mode
'
AUTODEFINE "off"
OPENCONSOLE
'PCI string cipher
string Orig = "this is a test..."
string enc,dec
Enc = PC1ENC("password",Orig)
Dec = PC1DEC("password",Enc)

print "PC1 cipher"
print enc
print dec
'
'XOR with string key
PRINT
print "XOR with string key"
string text
string pw="password"
''''int key=0xff25
text="this is a test..."
'''''xorstring(text,key)
xorstring2(text,pw)
print text
''''xorstring(text,key)
pw="password"
xorstring2(text,pw)
print text
'
'XOR with numeric KEYDOWN
PRINT
print "XOR with num key"
text="this is a test..."
int key=0xff25
text="this is a test..."
xorstring(text,key)
print text
xorstring(text,key)
print text
'
'RC4 string cipher
PRINT
print "RC4 cipher"
text="this is a test..."
pw="password"
rc4_crypt(text,pw)
print text
pw="password"
rc4_crypt(text,pw)
PRINT text


WAITCON
CLOSECONSOLE


'PC1 string cipher
'globals vars for PC1
INT x1a0[7]
char cle[16]
INT x1a2,inter, res, ax, bx, cx, dx, si, tmp, I
'
SUB code()
dx = (x1a2 + I)
ax = x1a0[I]
cx = 0x15A
bx = 0x4E35
tmp = ax
ax = si
si = tmp
tmp = ax
ax = dx
dx = tmp
IF (ax <> 0) THEN
ax *= bx
ENDIF
tmp = ax
ax = cx
cx = tmp
IF (ax <> 0) THEN
ax *=si
cx +=ax
ENDIF
tmp = ax
ax = si
si = tmp
ax += bx
dx +=cx 
ax++
x1a2 = dx
x1a0[I] = ax
res = ax || dx
I++
ENDSUB
'
SUB Assemble()
x1a0[0] = ((cle[0] * 256) + cle[1]) '% 65536
code()
inter = res
x1a0[1] = x1a0[0] || ((cle[2] * 256) + cle[3])
code()
inter = inter || res
x1a0[2] = x1a0[1] || ((cle[4] * 256) + cle[5])
code()
inter = inter || res
x1a0[3] = x1a0[2] || ((cle[6] * 256) + cle[7])
code()
inter = inter || res
x1a0[4] = x1a0[3] || ((cle[8] * 256) + cle[9])
code()
inter = inter || res
x1a0[5] = x1a0[4] || ((cle[10] * 256) + cle[11])
code()
inter = inter || res
x1a0[6] = x1a0[5] || ((cle[12] * 256) + cle[13])
code()
inter = inter || res
x1a0[7] = x1a0[6] || ((cle[14] * 256) + cle[15])
code()
inter = inter || res
I = 0
ENDSUB
'
SUB PC1ENC(encPassword AS STRING, encStringOut AS STRING),STRING
STRING encStringIn=""
INT x,length,cfc, cfd, z
char c,d,e
'
si = 0
x1a2 = 0
I = 0
FOR x = 0 TO 15
cle[x] = 0
NEXT x
length = LEN(encpassword)-1
FOR x = 0 TO length
cle[x] = encpassword[x]
NEXT x
length = LEN(encstringout)-1
FOR x = 0 TO length
c = encstringout[x] 
Assemble()
cfc=inter>>8
cfd=inter &255
FOR z = 0 TO 15
cle[z] = cle[z] || c
NEXT z
c = c || (cfc || cfd)
d=c>>4
E=c&15
encStringin +=  CHR$(0x61 + D)
encStringin +=  CHR$(0x61 + E)
NEXT x
RETURN encStringIn
ENDSUB
'
SUB PC1DEC(encPassword AS STRING, encStringIn AS STRING), STRING
STRING encStringOut=""
INT x, length, cfc, cfd , z
char c,d,e
'
si = 0
x1a2 = 0
I = 0
FOR x = 0 TO 15
cle[x] = 0
NEXT x
length = LEN(encpassword)-1
FOR x = 0 TO length
cle[x] =encpassword[x]
NEXT x
length = LEN(encstringin)-1
FOR x = 0 TO length step 2
d= encstringin[x]-0x61
        d= d << 4
        '
        e= encstringin[x+1]-0x61 
        c= d + e
Assemble()
cfc=inter>>8
cfd=inter &255
c = c || (cfc || cfd)
FOR z = 0 TO 15
cle[z] = cle[z] || c
NEXT z
encStringOut += CHR$(c)
NEXT x
RETURN encStringOut
ENDSUB

'XOR with num key
SUB XorString(istring sStr,INT xKey)
int i,j
j=len(sstr)-1
FOR I = 0 TO j
sstr[i]=chr$(sstr[i] || xkey)
NEXT i
ENDSUB
'
'XOR with string key
Sub XorString2(istring InString ,istring PassWord)
int i,len_password,len_instring,y
    len_instring = len(instring)-1
Len_PassWord = Len(PassWord) - 1
    '
for i=0 to len_password
password[i]+=0xff+password[i]
next i
'
y=0
For i = 0  To len_instring
       instring[i]=instring[i] || password[y]
'
If y = Len_PassWord Then
           y=0
Else
           y++
    End If
    Next i
End Sub
'
'RC4 string cipher
SUB RC4_Crypt(istring instring,istring passWord)
  int passpos,j,x,length,rc4t,rc4i,rc4j,temp
  Length = Len(passWord)
  '
  int RC4S[255], RC4K[255]
  ' 
  passpos = 0
  For x = 0 To 255
If passpos = Length THEN passpos = 0
    '
RC4S[x] = x
    RC4K[x] =password[passpos]
passpos++
  Next x
 
  ' remove keyword in clear ascii from RAM as fast as possible!
  passWord = ""
   ' permutation
  j=0
  For x = 0 To 255
    j = (j + RC4S[x] + RC4K[x])%256
    temp=rc4s[x]
rc4s[x]=rc4s[j]
rc4s[j]=temp
  Next x
  '
  RC4I = 0
  RC4J = 0
  RC4T = 0
  ' Now encode/decode
  length=len(instring)-1
For x = 0 To length
    RC4I = (RC4I + 1)%256
    rC4J = (RC4J + RC4S[rc4i])%256
    temp=rc4s[rc4i]
rc4s[rc4i]=rc4s[rc4j]
rc4s[rc4j]=temp
    '
RC4T = (RC4S[rc4i] + (RC4S[rc4j]))%256
instring[x]=instring[x]||RC4S[rc4t]
Next x
'
ENDSUB
'