Code: Select all
#define WIN_INCLUDEALL
#Include once "windows.bi"
#Include once "/win/commctrl.bi"
#Include once "file.bi"
Dim shared as integer TabPages : TabPages = 1
Dim Shared as integer GarbageBits : GarbageBits = 64
Dim Shared as integer GarbageBytes: GarbageBytes = 1
'===============================================================================
'===============================================================================
const Keys_Spinner_Val_max = 1024
const Keys_Spinner_val_min = 8
const Keys_Spinner_val_inc = 8
dim shared as uinteger Keys_Spinner_val = 8
const Garbage_Spinner_Val_max = 128
const Garbage_Spinner_val_min = 1
const Garbage_Spinner_val_inc = 1
dim shared as uinteger Garbage_Spinner_val = 1
'===============================================================================
'===============================================================================
dim shared as string file , extension , FileData
redim shared as integer Key(0 to (64*TabPages)-1)
redim shared as Ubyte SubKey(0 to 15)
Declare Sub Destroy_Tabs_n_Edits()
Declare sub Create_Tabs_n_Edits()
Declare sub LoadCypheredText()
Declare sub Cypher()
Declare sub DeCypher()
Declare sub GetKeys()
Declare sub LoadKey()
Declare sub SaveKey()
Declare sub SaveOutput()
Declare sub GenerateKey()
Declare sub GenerateSubKey()
Declare sub CopyOutputToInput()
Declare sub MessageSpinner_Up()
Declare sub MessageSpinner_Dn()
Declare sub MessageSize()
Declare sub GarbageSpinner_Up()
Declare sub GarbageSpinner_Dn()
Declare sub GarbageSize()
Declare Sub Help()
Declare sub GetFileName()
ReDim shared as hwnd STATICS(1 to TabPages)
ReDim shared as hwnd EDIT_KEY(1 to TabPages,1 to 8,1 to 8)
Dim shared As MSG msg ' Message variable (stores massages)
Dim shared As HWND hWnd _
, EDIT_IN _
, TABS _
, STATIC_OUTS(0 to 15) _
, EDIT_OUTS(0 to 15) _
, EDIT_OUT _
, LOADCYPHTEXT_BTN _
, CYPHER_BTN _
, DECYPHER_BTN _
, LOADKEY_BTN _
, SAVEKEY_BTN _
, GENERATEKEY_BTN _
, SPINNER_MESSAGE_UP _
, SPINNER_MESSAGE_DN _
, MESSAGE_SIZE _
, SPINNER_GARBAGE_UP _
, SPINNER_GARBAGE_DN _
, GARBAGE_SIZE _
, GENERATESUBKEY_BTN _
, SAVEOUTPUT_BTN _
, COPY_OUTPUT_TO_INPUT 'for multiple cyphering.
'===============================================================================
' Create window
hWnd = CreateWindowEx( 0, "#32770", "Vari_Cyph_FB_V6 Feb/2014", WS_OVERLAPPEDWINDOW Or WS_VISIBLE, 100, 100, 600, 600, 0, 0, 0, 0 )
'create in edit
EDIT_IN = CreateWindowEx( 0, "EDIT", "", WS_VISIBLE Or WS_CHILD Or WS_BORDER or ES_MULTILINE or WS_VSCROLL or WS_HSCROLL , 10, 10,430,110, hWnd, 0, 0, 0 )
'create readonly edit out
EDIT_OUT = CreateWindowEx( 0, "EDIT", "", WS_VISIBLE Or WS_CHILD Or WS_BORDER or ES_MULTILINE or WS_VSCROLL or WS_HSCROLL or ES_READONLY, 10,430,430,130, hWnd, 0, 0, 0 )
'create labels and edits for output.
dim as integer count1
for y as integer = 1 to 2 step 1
for x as integer = 1 to 8 step 1
count1 = ((y*8)-8)+x-1
SubKey(count1)=(65+count1)
STATIC_OUTS(count1) = CreateWindowEx( 0,"STATIC", right("0000" + bin(count1),4), WS_VISIBLE Or WS_CHILD ,(x*38)-38+(15*x) ,280+( (y*12)+20+(32*y)) , 38, 20, hWnd, 0, 0, 0 )
EDIT_OUTS( count1 ) = CreateWindowEx( 0,"EDIT" , CHR(SubKey(count1)) , WS_VISIBLE Or WS_CHILD Or WS_BORDER,(x*38)-30+(15*x) ,305+( (y*12)+10+(32*y)) , 18, 20, hWnd, 0, 0, 0 )
next
next
Redim key(0)
Redim SubKey(0)
LOADCYPHTEXT_BTN = CreateWindowEx( 0,"BUTTON" , "Load Cypher" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,10 , 100, 25, hWnd, 0, 0, 0 )
CYPHER_BTN = CreateWindowEx( 0,"BUTTON" , "Cypher" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,50 , 100, 25, hWnd, 0, 0, 0 )
DECYPHER_BTN = CreateWindowEx( 0,"BUTTON" , "DeCypher" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,90 , 100, 25, hWnd, 0, 0, 0 )
LOADKEY_BTN = CreateWindowEx( 0,"BUTTON" , "Load Key" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,150 , 100, 25, hWnd, 0, 0, 0 )
SAVEKEY_BTN = CreateWindowEx( 0,"BUTTON" , "Save Key" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,190 , 100, 25, hWnd, 0, 0, 0 )
GENERATEKEY_BTN = CreateWindowEx( 0,"BUTTON" , "Generate Key" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,230 , 100, 25, hWnd, 0, 0, 0 )
GENERATESUBKEY_BTN= CreateWindowEx( 0,"BUTTON" ,"Generate SubKey", WS_VISIBLE Or WS_CHILD Or WS_BORDER,445 ,400 , 130, 25, hWnd, 0, 0, 0 )
SAVEOUTPUT_BTN = CreateWindowEx( 0,"BUTTON" , "Save Output" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,445 ,450 , 130, 25, hWnd, 0, 0, 0 )
COPY_OUTPUT_TO_INPUT = CreateWindowEx( 0,"BUTTON" , "Copy to Input", WS_VISIBLE Or WS_CHILD Or WS_BORDER,445 ,500 , 130, 25, hWnd, 0, 0, 0 )
SPINNER_MESSAGE_UP = CreateWindowEx( 0,"BUTTON" , "" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,543 ,270 , 35, 12, hWnd, 0, 0, 0 )
SPINNER_MESSAGE_DN = CreateWindowEx( 0,"BUTTON" , "" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,543 ,282 , 35, 12, hWnd, 0, 0, 0 )
MESSAGE_SIZE = CreateWindowEx( 0,"EDIT" , str(TabPages*8) , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,270 , 80, 25, hWnd, 0, 0, 0 )
SPINNER_GARBAGE_UP = CreateWindowEx( 0,"BUTTON" , "" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,543 ,300 , 35, 12, hWnd, 0, 0, 0 )
SPINNER_GARBAGE_DN = CreateWindowEx( 0,"BUTTON" , "" , WS_VISIBLE Or WS_CHILD Or WS_BORDER,543 ,312 , 35, 12, hWnd, 0, 0, 0 )
GARBAGE_SIZE = CreateWindowEx( 0,"EDIT" , str(GarbageBytes) , WS_VISIBLE Or WS_CHILD Or WS_BORDER,460 ,300 , 80, 25, hWnd, 0, 0, 0 )
'End Control setup
Create_Tabs_n_Edits()
'===============================================================================
'===============================================================================
'begin mesage processing
While GetMessage( @msg, 0, 0, 0 )
TranslateMessage( @msg )
DispatchMessage( @msg )
Select Case msg.hwnd
Case hWnd
Select Case msg.message
Case 273
Destroy_Tabs_n_Edits()
PostQuitMessage(0)
'End
End Select
Case TABS ' If msg is window hwnd: get messages from window
Select Case msg.message
case WM_LBUTTONDOWN
count1 = TabCtrl_GetCurSel(TABS)+1
for a as integer = lbound(STATICS) to ubound(STATICS)
ShowWindow(STATICS(a), SW_HIDE)
next
ShowWindow(STATICS(count1), SW_SHOW)
End Select
Case LOADCYPHTEXT_BTN
Select Case msg.message
case WM_LBUTTONDOWN
LoadCypheredText()
End Select
Case CYPHER_BTN
Select Case msg.message
case WM_LBUTTONDOWN
Cypher()
End Select
Case DECYPHER_BTN
Select Case msg.message
case WM_LBUTTONDOWN
DeCypher()
End Select
Case LOADKEY_BTN
Select Case msg.message
case WM_LBUTTONDOWN
LoadKey()
End Select
Case SAVEKEY_BTN
Select Case msg.message
case WM_LBUTTONDOWN
SaveKey()
End Select
case SPINNER_MESSAGE_UP
select case msg.message
case WM_LBUTTONDOWN
MessageSpinner_Up()
end select
case SPINNER_MESSAGE_DN
select case msg.message
case WM_LBUTTONDOWN
MessageSpinner_Dn()
end select
Case MESSAGE_SIZE
select case msg.message
case WM_LBUTTONDOWN
MessageSize()
end select
Case SPINNER_GARBAGE_UP
select case msg.message
case WM_LBUTTONDOWN
GarbageSpinner_Up()
end select
Case SPINNER_GARBAGE_DN
select case msg.message
case WM_LBUTTONDOWN
GarbageSpinner_Dn()
end select
Case GARBAGE_SIZE
select case msg.message
case WM_LBUTTONDOWN
GarbageSize()
end select
Case SAVEOUTPUT_BTN
Select Case msg.message
case WM_LBUTTONDOWN
SaveOutput()
End Select
Case COPY_OUTPUT_TO_INPUT
select Case msg.message
case WM_LBUTTONDOWN
CopyOutputToInput()
end select
Case GENERATEKEY_BTN
Select Case msg.message
case WM_LBUTTONDOWN
GenerateKey()
End Select
Case GENERATESUBKEY_BTN
Select Case msg.message
case WM_LBUTTONDOWN
GenerateSubKey()
End Select
End Select
Wend
Destroy_Tabs_n_Edits()
PostQuitMessage(0)
END
'===============================================================================
'===============================================================================
'subs and functions below here
'===============================================================================
'===============================================================================
sub MessageSpinner_Up()
Destroy_Tabs_n_Edits()
if Keys_Spinner_val < Keys_Spinner_val_max then Keys_Spinner_val+= Keys_Spinner_val_inc
SetWindowText(MESSAGE_SIZE,str(Keys_Spinner_val))
TabPages = Keys_Spinner_val / 8
Garbagebits = Garbage_Spinner_Val*8*Keys_Spinner_Val
GarbageBytes = GarbageBits/8/Keys_Spinner_val
Create_Tabs_n_Edits()
end sub
'===============================================================================
'===============================================================================
sub MessageSpinner_Dn()
Destroy_Tabs_n_Edits()
if Keys_Spinner_val > Keys_Spinner_val_min then Keys_Spinner_val-= Keys_Spinner_val_inc
SetWindowText(MESSAGE_SIZE,str(Keys_Spinner_val))
TabPages = Keys_Spinner_val / 8
Garbagebits = Garbage_Spinner_Val*8*Keys_Spinner_Val
GarbageBytes = GarbageBits/8/Keys_Spinner_val
Create_Tabs_n_Edits()
end sub
'===============================================================================
'===============================================================================
sub MessageSize()
Destroy_Tabs_n_Edits()
dim as string*6 textin
GetWindowText(MESSAGE_SIZE,textin,5)
textin=trim(textin,chr(32))
textin=trim(textin,chr(0))
Keys_Spinner_val = val(textin)
if Keys_Spinner_val > Keys_Spinner_Val_max = 1024 then
Keys_Spinner_val = Keys_Spinner_val_max
end if
dim as string str1
dim as integer dec1
do
str1=str(Keys_Spinner_val/8)
dec1=instr(1,str1,".")
if dec1<>0 then Keys_Spinner_val+=1
loop until dec1 = 0
SetWindowText(MESSAGE_SIZE,str(Keys_Spinner_val))
TabPages = Keys_Spinner_val / 8
Garbagebits = Garbage_Spinner_Val*8*Keys_Spinner_Val
GarbageBytes = GarbageBits/8/Keys_Spinner_val
Create_Tabs_n_Edits()
end sub
'===============================================================================
'===============================================================================
sub GarbageSpinner_Up()
if Garbage_Spinner_val < Garbage_Spinner_val_max then Garbage_Spinner_val+= Garbage_Spinner_val_inc
Garbagebits = Garbage_Spinner_Val*8*Keys_Spinner_Val
GarbageBytes = GarbageBits/8/Keys_Spinner_val
SetWindowText(GARBAGE_SIZE,str(Garbage_Spinner_val))
end sub
'===============================================================================
'===============================================================================
sub GarbageSpinner_Dn()
if Garbage_Spinner_val > Garbage_Spinner_val_min then Garbage_Spinner_val-= Garbage_Spinner_val_inc
Garbagebits = Garbage_Spinner_Val*8*Keys_Spinner_Val
GarbageBytes = GarbageBits/8/Keys_Spinner_val
SetWindowText(GARBAGE_SIZE,str(Garbage_Spinner_val))
End Sub
'===============================================================================
'===============================================================================
sub GarbageSize()
Destroy_Tabs_n_Edits()
dim as string*6 textin
GetWindowText(GARBAGE_SIZE,textin,5)
textin=trim(textin,chr(32))
textin=trim(textin,chr(0))
Garbage_Spinner_val = val(textin)
if Garbage_Spinner_val > Garbage_Spinner_val_max then
Garbage_Spinner_val = Garbage_Spinner_val_max
end if
SetWindowText(GARBAGE_SIZE,str(Garbage_Spinner_val))
TabPages = Keys_Spinner_val / 8
Garbagebits = Garbage_Spinner_Val*8*Keys_Spinner_Val
GarbageBytes = GarbageBits/8/Keys_Spinner_val
Create_Tabs_n_Edits()
end sub
'===============================================================================
'===============================================================================
Sub Destroy_Tabs_n_Edits()
'delete Statics and edits
for a as integer = 1 to ubound(EDIT_KEY,1)
for x as integer = 1 to ubound(EDIT_KEY,2)
for y as integer = 1 to ubound(EDIT_KEY,3)
DestroyWindow(EDIT_KEY(a,x,y))
next
next
DestroyWindow(STATICS(a))
TabCtrl_DeleteItem(TABS,a)
next
DestroyWindow(TABS)
end Sub
'===============================================================================
'===============================================================================
sub Create_Tabs_n_Edits()
'create tab ctrl
TABS = CreateWindowEX( 0, WC_TABCONTROL , "", WS_VISIBLE or WS_CHILD Or WS_CLIPSIBLINGS, 10, 120 , 420, 220, hWnd, 0, 0, 0 )
'create tab flaps and text on tab flaps
Dim As Integer Count1
Dim As String*256 text
for a as integer = 1 to TabPages
count1=(a*64)-63
text = Str(count1) + " to " + str(count1+63)
Dim As TCITEM tie
tie.mask = TCIF_TEXT
tie.pszText = StrPtr(text)
TabCtrl_InsertItem(TABS, count1 ,@tie )
next
TabCtrl_SetCurSel(TABS,TabPages-1)
'put static boxes on the tabs and create x,y grid of edits on them
ReDim preserve STATICS(1 to TabPages)
ReDim preserve EDIT_KEY(1 to TabPages,1 to 8,1 to 8)
redim key(0 to TabPages*64-1)
for a as integer = 1 to TabPages
STATICS(a) = CreateWindowEX( 0 , "STATIC" , "", WS_CHILD or WS_BORDER or WS_CLIPSIBLINGS, 8, 30 , 405, 185, TABS , 0, 0, 0 )
for x as integer = 1 to 8
for y as integer = 1 to 8
count1 = ((a*64)-64)+((x*8)-8)+y-1
Key(count1) = count1+1
EDIT_KEY(a,x,y) = CreateWindowEx( 0 ,"EDIT", str(Key(count1)) , WS_VISIBLE or WS_CHILD Or WS_BORDER , (x*40)-47+(11*x) , (y*12)-17+(10*y) , 38, 20, STATICS(a), 0, 0, 0 )
next
next
next
TabCtrl_SetCurSel(TABS,TabPages-1)
for a as integer = lbound(STATICS) to ubound(STATICS)
ShowWindow(STATICS(a), SW_HIDE)
next
ShowWindow(STATICS(TabPages), SW_SHOW)
redim Key(0)
end sub
'===============================================================================
'===============================================================================
sub LoadCypheredText()
GetFileName()
FileData=""
if fileexists(file) then
dim as ulongint position
dim as ulongint length = filelen(file)-2
dim as ubyte char
open file for binary as #1
position=0
do
Get #1,,Char
FileData+=chr(char)
position+=1
loop until position=length
close #1
SetWindowText(EDIT_IN,FileData)
FileData=""
file=""
end if
end sub
'===============================================================================
'===============================================================================
sub Cypher()
Redim Key(0 to (64*TabPages-1))
Redim SubKey(0 to 15)
GetKeys()
'get message input from input edit_box into a string
dim as string GetInputMessage
dim as integer txtlen
txtlen = (GetWindowTextLength(EDIT_IN)+1)
GetInputMessage = string(txtlen,chr(0))
GetWindowText(EDIT_IN , GetInputMessage, txtlen)
GetInputMessage = trim(GetInputMessage,Chr(32))
GetInputMessage = trim(GetInputMessage,chr(0))
'make input string an even number of Block sizes
dim as string str1
dim as double dec
do
str1=str( len(GetInputMessage) / (TabPages*8) )
dec=instr(1,str1,".")
if dec<>0 then GetInputMessage+="_" 'if message is not a multiple of (TabPages*8) characters
loop until dec=0
'turn message into binary
dim as string BinaryMessageBlocks
for a as integer = 1 to len(GetInputMessage) step 1
BinaryMessageBlocks+= right("00000000" + bin( asc(mid(GetInputMessage,a,1)) ) ,8)
next
'stick user message bits (TabPages*64/TabPages) into random garbage of length GarbageBits
dim as string MessageBits
dim as string RandomGarbage
dim as string Accumulated
for a as integer = 1 to len(BinaryMessageBlocks) step (64*TabPages)
MessageBits = mid(BinaryMessageBlocks,a, 64*tabPages)
RandomGarbage=""
for garbage as integer = 1 to GarbageBits step 1
RandomGarbage+=str( int(rnd*2) ) 'right("00000000" + bin(int(rnd*26)+97) , 8)
next
for insert as integer = lbound(Key) to ubound(Key)
mid(RandomGarbage,Key(insert),1) = mid(MessageBits,insert+1,1)
next
Accumulated+=RandomGarbage
next
Redim Key(0)
dim as string CypheredOutput
dim as string*4 QuadBits
for a as integer = 1 to len(Accumulated) step 4
dec=0
QuadBits=mid(Accumulated,a,4)
mid(Accumulated,a,4)="0000"
if mid(QuadBits,1,1)="1" then Dec+=8
if mid(QuadBits,2,1)="1" then Dec+=4
if mid(QuadBits,3,1)="1" then Dec+=2
if mid(QuadBits,4,1)="1" then Dec+=1
CypheredOutput+=Chr(SubKey(Dec))
next
Redim SubKey(0)
SetWindowText(EDIT_OUT,CypheredOutput)
CypheredOutput=""
end sub
'===============================================================================
'===============================================================================
sub DeCypher()
redim Key(0 to ((TabPages*64)-1))
redim SubKey(0 to 15)
GetKeys()
'get message input from input edit_box into a string
dim as string GetInputMessage
dim as integer txtlen
txtlen = (GetWindowTextLength(EDIT_IN)+1)
GetInputMessage = string(txtlen,chr(0))
GetWindowText(EDIT_IN , GetInputMessage, txtlen)
GetInputMessage = trim(GetInputMessage,chr(0))
if len(GetInputMessage)<>0 then
dim as string BinarySubOutput(1 to (len(GetInputMessage)/(GarbageBits/8)/2) )
dim as string Bites
dim as integer Chunks = (len(GetInputMessage)/(GarbageBits/8)/2)
dim as ubyte Char
Dim as integer Dec=1
for a as integer = 1 to len(GetInputMessage) step (len(GetInputMessage)/Chunks)
Bites = mid( GetInputMessage, a, len(GetInputMessage)/Chunks )
for b as integer = 1 to len(bites)
Char = asc( mid(Bites,b,1) )
for c as integer = 0 to 15
if Char = SubKey(c) then BinarySubOutput(Dec)+=right("0000"+bin(c),4)
next
next
Dec+=1
next
Dec-=1
dim as string Binary_out
for a as integer = 1 to Dec step 1
for b as integer = 0 to ubound(Key)
Binary_Out+= mid(BinarySubOutput(a),Key(b),1)
next
next
dim as string FinalOutput
dim as string*8 OctaBits
for a as integer = 1 to len(Binary_Out) step 8
OctaBits = mid(Binary_Out,a,8)
mid(Binary_Out,a,8)="00000000"
Dec=0
if mid(OctaBits,1,1)="1" then Dec+=128
if mid(OctaBits,2,1)="1" then Dec+= 64
if mid(OctaBits,3,1)="1" then Dec+= 32
if mid(OctaBits,4,1)="1" then Dec+= 16
if mid(OctaBits,5,1)="1" then Dec+= 8
if mid(OctaBits,6,1)="1" then Dec+= 4
if mid(OctaBits,7,1)="1" then Dec+= 2
if mid(OctaBits,8,1)="1" then Dec+= 1
FinalOutput+=Chr(Dec)
next
SetWindowText(EDIT_OUT,FinalOutput)
end if
end sub
'===============================================================================
'===============================================================================
sub GetKeys()
'get Keys from Edits
dim as string*16 CharKey
dim as string*1 CharSubKey
for a as integer = 1 to TabPages
for b as integer = 1 to 8
for c as integer = 1 to 8
GetWindowText( EDIT_KEY(a,b,c), CharKey , 16) 'GarbageBytes+1 )
key( ((a*64)-64)+((b*8)-8)+c-1 ) = val(CharKey)
next
next
next
for a as integer = 1 to 2
for b as integer = 1 to 8
'print ((a*8)-8) +b-1
GetWindowText( EDIT_OUTS( ((a*8)-8)+b-1 ) , CharSubKey , 2)
SubKey( ((a*8)-8)+b-1 ) = asc(CharSubKey)
next
next
end sub
'===============================================================================
'===============================================================================
sub LoadKey()
Redim Key(0 to ((TabPages*64)-1))
Redim SubKey(0 to 15)
GetFileName()
if fileexists(file) then
open file for input as #1
dim as String Inputs
line input #1 , Inputs
if val(Inputs) <> ubound(Key) then
BEEP
print "!!~~WRONG SIZE KEY~~!!"
return
end if
line input #1 , Inputs
if val(Inputs) <> GarbageBytes then
BEEP
print "!!~~WRONG SIZE KEY~~!!"
return
end if
dim as ulongint count
count=0
do
line input #1 , Inputs
Key(count) = val(Inputs)
count+=1
loop until count = ubound(Key)+1
count=0
do
line input #1 , Inputs
SubKey(count) = val(Inputs)
count+=1
loop until count = ubound(SubKey)+1
Close #1
dim as ulongint dec
for a as integer =1 to TabPages
for x as integer = 1 to 8
for y as integer = 1 to 8
dec = (((a*64)-64)+((x*8)-8)+y)-1
'print a,x,y, Dec ;" ";Key(Dec)
SetWindowText( EDIT_KEY(a,x,y) , str(Key(dec)) )
next
next
next
for y as integer = 1 to 2 step 1
for x as integer = 1 to 8 step 1
Dec = (((y*8)-8)+x)-1
'print y,x,Dec,SubKey(Dec)
SetWindowText(EDIT_OUTS( Dec ) , chr(SubKey(Dec)) )
next
next
Redim Key(0)
Redim SubKey(0)
file=""
extension=""
end if
end sub
'===============================================================================
'===============================================================================
sub SaveKey()
Redim Key( 0 to ((TabPages*64)-1) )
Redim SubKey(0 to 15)
GetKeys()
GetFileName()
dim as string SaveKeys = ""
if file<>"" then
open file for output as #1
print #1 , ltrim(str(ubound(key)))
print #1 , ltrim(str(GarbageBytes))
for a as integer = 0 to ((TabPages*64)-1)
print #1 , str(Key(a))
next
for a as integer = 0 to 15
Print #1 , SubKey(a)
next
close #1
end if
Redim Key(0)
Redim SubKey(0)
end sub
'===============================================================================
'===============================================================================
sub SaveOutput()
GetFileName()
if file<>"" then
'get message input from Output edit_box into a string
dim as string GetOutputMessage
dim as integer txtlen
txtlen = (GetWindowTextLength(EDIT_OUT)+1)
GetOutputMessage = string(txtlen,chr(0))
GetWindowText(EDIT_OUT , GetOutputMessage, txtlen)
GetOutputMessage = trim(GetOutputMessage,chr(0))
open file for output as #1
print #1 , GetOutputMessage
close #1
end if
end sub
'===============================================================================
'===============================================================================
Sub CopyOutputToInput()
'get message input from Output edit_box into a string
dim as string GetOutputMessage
dim as integer txtlen
txtlen = (GetWindowTextLength(EDIT_OUT)+1)
GetOutputMessage = string(txtlen,chr(0))
GetWindowText(EDIT_OUT , GetOutputMessage, txtlen)
GetOutputMessage = trim(GetOutputMessage,chr(0))
SetWindowText(EDIT_IN , GetOutputMessage)
SetWindowText(EDIT_OUT , "")
end sub
'===============================================================================
'===============================================================================
sub GenerateKey()
' ((a*64)-64)+((x*8)-8)+y
Redim Key(0 to (TabPages*64-1) )
dim a as integer
dim b as integer
dim c as integer
dim d as integer
'create random key for main cypher.
for a = 0 to (TabPages*64)-1
key(a) = 0
next
a=0
do
b = int(rnd*GarbageBits)+1
do
b = int(rnd*GarbageBits)+1
d = 0
for c = 0 to a
if key(c) = b then d = 1
next
loop until d = 0
key(a) = b
a = a + 1
loop until a=(TabPages*64)
for a = 1 to TabPages
for b=1 to 8
for c=1 to 8
SetWindowText( EDIT_KEY(a,b,c) , str( key( ((a*64)-64)+((b*8)-8)+c -1 )) )
next
next
next
Redim Key(0)
end sub
'===============================================================================
'===============================================================================
sub GenerateSubKey()
Redim SubKey(0 to 15)
'create 16 letter subsitution for output
dim a as integer
dim b as integer
dim c as integer
dim d as integer
for a = 0 to 15
SubKey(a) = 0
next
a=0
do
b = int( rnd*26 )+65
do
b = int( rnd*26 )+65
d = 0
for c=0 to a
if SubKey(c) = b then d = 1
next
loop until d = 0
SubKey(a) = b
a=a+1
loop until a=16
'answer = ((a*8)-8) +b
for a = 1 to 2
for b = 1 to 8
'print ((a*8)-8) +b-1
SetWindowText( EDIT_OUTS( ((a*8)-8)+b-1 ) , chr( SubKey( ((a*8)-8)+b-1 ) ) )
next
next
Redim SubKey(0)
end sub
'===============================================================================
'===============================================================================
sub getfilename()
dim ofn as OPENFILENAME
dim filename as zstring * MAX_PATH+1
with ofn
.lStructSize = sizeof( OPENFILENAME )
.hwndOwner = hWnd
.hInstance = GetModuleHandle( NULL )
.lpstrFilter = strptr( !"All Files, (*.*)\0*.*\0\0" )
.lpstrCustomFilter = NULL
.nMaxCustFilter = 0
.nFilterIndex = 1
.lpstrFile = @filename
.nMaxFile = sizeof( filename )
.lpstrFileTitle = NULL
.nMaxFileTitle = 0
.lpstrInitialDir = NULL
.lpstrTitle = @"File To Open."
.Flags = OFN_EXPLORER 'or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
.nFileOffset = 0
.nFileExtension = 0
.lpstrDefExt = NULL
.lCustData = 0
.lpfnHook = NULL
.lpTemplateName = NULL
end with
if( GetOpenFileName( @ofn ) = FALSE ) then
file = ""
extension=""
return
else
file = filename
extension = right$(filename,4)
end if
end sub
Its real slow and says "Not Responding" for several minutes at higher levels , max 1024 on the message bytes and max 128x on the garbage bytes.
If you type the values in to the edits you need to click on them after to get them to set..
Its a message scrambler , your message bits get scrambled among several times as many garbage bits.
each column of the tab grids is a character of your message and the number in the vertical edit is what bit position your message bit gets inserted into the garbage block...