AutoHotkey Homepage AutoHotkey Community
Let's help each other out
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Encrypt Utility
Goto page 1, 2  Next
 
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions
View previous topic :: View next topic  
Author Message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Sat Feb 09, 2008 2:42 am    Post subject: Encrypt Utility Reply with quote

Note: this script is only sample of how one feature in Sakurako's encryption method would work (but that of the method would probably use something as Cos instead of simply adding the password), for security the sample would be only recommended for personal use
update version might use improved encryption and not likely to decrypt the code from previous version
Quote:
How it works?
Text + Password = Code, Code - Password = Text, but Password = Code - Text, that is, it would not be that secure if using same password for different file(s). In addition, if using only alphabet and number, conversion function other than ASCII code would be recommended (converting to invalid characters would probably reduce security level)
Version List:
Update Version http://www.autohotkey.com/forum/viewtopic.php?p=177459#177459
Previous Version (Original Function Version) http://www.autohotkey.com/forum/viewtopic.php?p=177371#177371
Original Version http://www.autohotkey.com/forum/viewtopic.php?p=177597#177597

Code:
CodeCheck(String, Code, Option = "v")
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code ; retrieve and check password
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck ; calculate password
 {
  If Test <>
  {
   Code0 += 1
   Code%Code0% := "0x" . Test . A_LoopField
   Code%Code0% += CodeCheckRec
   Code%Code0% := Mod(Code%Code0%, 0x100)
   CodeCheckRec := Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 Code0 += 1
 CodeCheck = 0
 Loop, Parse, String ; encrypt text, Mod(Asc(A_LoopField) + PasswordAsc(n), 0x100)
 {
  CodeCheck += 1
  If (CodeCheck > Code0)
   CodeCheck = 0x1
  TextConvertCheck .= SubStr("0" SubStr(Mod(Asc(A_LoopField) + Code%CodeCheck%, 0x100), 3), -1, 2)
 }
 SetFormat, integer, %A_FormatIntegerRec%
 If Option
  If (TextCheck(TextConvertCheck, Code) <> String)
   TextConvertCheck = error
 return TextConvertCheck
}
Code:
TextCheck(String, Code)
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code ; retrieve and check password
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck ; calculate password
 {
  If Test <>
  {
   Code0 += 1
   Code%Code0% := "0x" . Test . A_LoopField
   Code%Code0% += CodeCheckRec
   Code%Code0% := Mod(Code%Code0%, 0x100)
   CodeCheckRec := Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 Code0 += 1
 CodeCheck = 0
 Loop, Parse, String ; decrypt code, Mod(AscCheck(n) - PasswordAsc(n) + 0x100, 0x100)
 {
  If Test <>
  {
   CodeCheck += 1
   If (CodeCheck > Code0)
    CodeCheck = 0x1
   Test := "0x" Test A_LoopField
   Code_C := Mod(Test - Code%CodeCheck% + 0x100, 0x100)
   TextCheck0 .= Chr(Code_C)
   Test =
  }
  Else
   Test .= A_LoopField
 }
 SetFormat, integer, %A_FormatIntegerRec%
 return TextCheck0
}

_________________


Last edited by Sakurako on Fri Apr 04, 2008 4:12 pm; edited 5 times in total
Back to top
View user's profile Send private message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Sat Feb 09, 2008 12:26 pm    Post subject: Reply with quote

Code:
Msgbox, 64, EUtility Test, % "<" TextCheck("7785a4a19c9fa6a9508c95a9a6", A_YWeek) ">`n" CodeCheck("EUtility Test", A_YWeek, 0)
Code:
CodeCheck(String, Code, Option = "v")
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
 {
  Code%A_Index% := Asc(A_LoopField)
  Code0 := A_Index
 }
 CodeCheck = 0
 Loop, Parse, String
 {
  CodeCheck += 1
  If (CodeCheck > Code0)
   CodeCheck = 0x1
  TextConvertCheck .= SubStr("0" SubStr(Mod(Asc(A_LoopField) + Code%CodeCheck%, 0x100), 3), -1, 2)
 }
 SetFormat, integer, %A_FormatIntegerRec%
 If Option
  If (TextCheck(TextConvertCheck, Code) <> String)
   TextConvertCheck = error
 return TextConvertCheck
}
Code:
TextCheck(String, Code)
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
 {
  Code%A_Index% := Asc(A_LoopField)
  Code0 := A_Index
 }
 CodeCheck = 0
 Loop, Parse, String
 {
  If Test <>
  {
   CodeCheck += 1
   If (CodeCheck > Code0)
    CodeCheck = 0x1
   Test := "0x" Test A_LoopField
   Code_C := Mod(Test - Code%CodeCheck% + 0x100, 0x100)
   TextCheck0 .= Chr(Code_C)
   Test =
  }
  Else
   Test .= A_LoopField
 }
 SetFormat, integer, %A_FormatIntegerRec%
 return TextCheck0
}

_________________
Back to top
View user's profile Send private message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Sat Feb 09, 2008 10:49 pm    Post subject: Reply with quote

Special Version
Code:
CodeCheck(String, Code, Option = "v")
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck
 {
  If Test <>
  {
   Code0 += 1
   Code%Code0% := "0x" . Test . A_LoopField
   Code%Code0% += CodeCheckRec
   Code%Code0% := Mod(Code%Code0%, 0x100)
   CodeCheckRec := Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 Code0 += 1
 CodeCheck = 0
 Loop, Parse, String
 {
  CodeCheck += 1
  If (CodeCheck > Code0)
   CodeCheck = 0x1
  TextConvertCheck .= SubStr("0" SubStr(Mod(Asc(A_LoopField) + Code%CodeCheck%, 0x100), 3), -1, 2)
 }
 SetFormat, integer, %A_FormatIntegerRec%
 If Option
  If (TextCheck(TextConvertCheck, Code) <> String)
   TextConvertCheck = error
 return TextConvertCheck
}
Code:
TextCheck(String, Code)
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck
 {
  If Test <>
  {
   Code0 += 1
   Code%Code0% := "0x" . Test . A_LoopField
   Code%Code0% += CodeCheckRec
   Code%Code0% := Mod(Code%Code0%, 0x100)
   CodeCheckRec := Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 Code0 += 1
 CodeCheck = 0
 Loop, Parse, String
 {
  If Test <>
  {
   CodeCheck += 1
   If (CodeCheck > Code0)
    CodeCheck = 0x1
   Test := "0x" Test A_LoopField
   Code_C := Mod(Test - Code%CodeCheck% + 0x100, 0x100)
   TextCheck0 .= Chr(Code_C)
   Test =
  }
  Else
   Test .= A_LoopField
 }
 SetFormat, integer, %A_FormatIntegerRec%
 return TextCheck0
}

_________________
Back to top
View user's profile Send private message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Sun Feb 10, 2008 8:24 pm    Post subject: Re: Encrypt Utility Reply with quote

Original Version
Sakurako wrote:
Code:
SetFormat, integer, hex
Gui, Add, Edit, vTextCheck w300 h300 HwndControlHwnd
Gui, Add, Edit, vCode w300, Code
Gui, Add, Button, section vEUtility_FilePick gFilePick, File
Gui, Add, Button, ys vEUtility_Code gCodeCheck, Code
Gui, Add, Button, ys vEUtility_Text gTextCheck, Text
Gui, Show,, Encrypt Utility ; probably would be better if converting to Unicode first, 0 ~ f to extended
return

CodeCheck:
If FileName
{
 FileRead, TextCheck, %Filename%
 InputBox, Code, Code,,,, 100
 If Code =
  Code = Code
}
Else
{
 GuiControlGet, TextCheck
 GuiControlGet, Code
 If TextCheck =
  return
}
Loop, Parse, Code
{
 Code%A_Index% := Asc(A_LoopField)
 Code0 := A_Index
}
TextConvertCheck =
CodeCheck = 0
Loop, Parse, TextCheck
{
 CodeCheck += 1
 If (CodeCheck > Code0)
  CodeCheck = 0x1
 TextConvertCheck .= SubStr("0" SubStr(Mod(Asc(A_LoopField) + Code%CodeCheck%, 0xff), 3), -1, 2)
}
Gosub, TextCheck
IfInString, TextCheck0, %TextCheck%
{
 GuiControl,, TextCheck, %TextConvertCheck%
 MsgBox, 64, Info, Done
}
Else
 MsgBox, 48, Info, Error
If FileName
 FileAppend, %TextCheck0%, %FileName%.cse
FileName =
return

TextCheck:
If A_GuiControl = EUtility_Text
{
 GuiControlGet, TextCheck
 GuiControlGet, Code
 Loop, Parse, Code
 {
  Code%A_Index% := Asc(A_LoopField)
  Code0 := A_Index
 }
 If TextCheck =
  return
 Else
  TextConvertCheck := TextCheck
}
Test =
TextCheck0 =
CodeCheck = 0
Loop, Parse, TextConvertCheck
{
 If Test <>
 {
  CodeCheck += 1
  If (CodeCheck > Code0)
   CodeCheck = 0x1
  Test := "0x" Test A_LoopField
  Code_C := Mod(Test - Code%CodeCheck% + 0xff, 0xff)
  TextCheck0 .= Chr(Code_C)
  Test =
 }
 Else
  Test .= A_LoopField
}
If A_GuiControl = EUtility_Text
{
 GuiControl,, TextCheck, %TextCheck0%
 MsgBox, 64, Info, Done
}
Loop %Code0%
 Code%A_Index% =
return

FilePick:
FileSelectFile, FileName, 1,, Encrypt Utility, Document (*.txt)
If FileName =
 return
Gosub, CodeCheck
return

_________________
Back to top
View user's profile Send private message
SMOKE 1990



Joined: 12 Feb 2008
Posts: 50

PostPosted: Fri Feb 15, 2008 5:02 am    Post subject: Reply with quote

I got a question for you that you could pm me about so i can find it easier, where do enter this into my script in order for it to encrypt after i complie it. I dont mind letting a few people use my program i just dont want them to know how its made.
Back to top
View user's profile Send private message
tic



Joined: 22 Apr 2007
Posts: 1355

PostPosted: Fri Feb 15, 2008 6:47 am    Post subject: Reply with quote

just put a password and /nodecompile switch when you compile
Back to top
View user's profile Send private message
scottmeyer



Joined: 29 Jul 2007
Posts: 13

PostPosted: Sun Feb 17, 2008 2:29 pm    Post subject: Need help, variant scrypt Reply with quote

Hello,

Your script autohotkey for encryption is excellent!

I want to use part of your program in my program, in order to give information to my program without the user does not know what it is.

I would need a GUI requesting the code (encrypted) and an OK button.

I also hope that the code (key phrase) is placed directly in my AutoHotKey program, we should not box asking GUI code.

Sorry I do not speak English well, I am french ^ ^
J'espére that I managed to make myself understood

Thank you in advance for your help
Back to top
View user's profile Send private message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Mon Feb 18, 2008 2:32 am    Post subject: Reply with quote

SMOKE 1990 wrote:
I got a question for you that you could pm me about so i can find it easier, where do enter this into my script in order for it to encrypt after i complie it. I dont mind letting a few people use my program i just dont want them to know how its made.
Sorry, it might be difficult to support script file encryption without dynamic command ...
scottmeyer wrote:
...
I would need a GUI requesting the code (encrypted) and an OK button.

I also hope that the code (key phrase) is placed directly in my AutoHotKey program, we should not box asking GUI code
...
Code:
Gui, Add, Edit, vText w300 h300
Gui, Add, Edit, vCode w100, Code
Gui, Add, Button, gEncrypt, Encrypt
Gui, Show,, Encrypt - EncryptUtility
return

Encrypt:
GuiControlGet, Code
GuiControlGet, Text
GuiControl,, Text, % CodeCheck(Text, Code)
return

CodeCheck(String, Code, Option = "v")
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 _Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck
 {
  If Test <>
  {
   Code0 += 1
   _Code%Code0% := "0x" . Test . A_LoopField
   _Code%Code0% += CodeCheckRec
   _Code%Code0% := Mod(_Code%Code0%, 0x100)
   CodeCheckRec := _Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 If (StrLen(Code) <= StrLen(String))
  Code0 += 1
 Loop %Code0%
 {
  ANum := Code0 - A_Index + 1
  Code%ANum% := _Code%A_Index%
 }
 CodeCheck = 0
 Loop, Parse, String
 {
  CodeCheck += 1
  If (CodeCheck > Code0)
   CodeCheck = 0x1
  TextConvertCheck .= SubStr("0" SubStr(Mod(Asc(A_LoopField) + Code%CodeCheck%, 0x100), 3), -1, 2)
 }
 SetFormat, integer, %A_FormatIntegerRec%
 If Option
  If (TextCheck(TextConvertCheck, Code) <> String)
   TextConvertCheck = error
 return TextConvertCheck
}

; following function could be removed
TextCheck(String, Code)
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 _Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck
 {
  If Test <>
  {
   Code0 += 1
   _Code%Code0% := "0x" . Test . A_LoopField
   _Code%Code0% += CodeCheckRec
   _Code%Code0% := Mod(_Code%Code0%, 0x100)
   CodeCheckRec := _Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 If (StrLen(Code) <= StrLen(String))
  Code0 += 1
 Loop %Code0%
 {
  ANum := Code0 - A_Index + 1
  Code%ANum% := _Code%A_Index%
 }
 CodeCheck = 0
 Loop, Parse, String
 {
  If Test <>
  {
   CodeCheck += 1
   If (CodeCheck > Code0)
    CodeCheck = 0x1
   Test := "0x" Test A_LoopField
   Code_C := Mod(Test - Code%CodeCheck% + 0x100, 0x100)
   TextCheck0 .= Chr(Code_C)
   Test =
  }
  Else
   Test .= A_LoopField
 }
 SetFormat, integer, %A_FormatIntegerRec%
 return TextCheck0
}
Code:
Gui, Add, Edit, vText w300 h300 ; text to replace
Gui, Add, Edit, vCode w100
Gui, Add, Button, gDecrypt, OK
Gui, Show,, Decrypt - EncryptUtility
return

Decrypt:
GuiControlGet, Code
GuiControlGet, Text
GuiControl,, Text, % TextCheck(Text, Code)
return

TextCheck(String, Code) ; format TextCheck("CodeValue", "PasswordValue") or TextCheck(CodeVar, PasswordVar)
{
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 _Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck
 {
  If Test <>
  {
   Code0 += 1
   _Code%Code0% := "0x" . Test . A_LoopField
   _Code%Code0% += CodeCheckRec
   _Code%Code0% := Mod(_Code%Code0%, 0x100)
   CodeCheckRec := _Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 If (StrLen(Code) <= StrLen(String))
  Code0 += 1
 Loop %Code0%
 {
  ANum := Code0 - A_Index + 1
  Code%ANum% := _Code%A_Index%
 }
 CodeCheck = 0
 Loop, Parse, String
 {
  If Test <>
  {
   CodeCheck += 1
   If (CodeCheck > Code0)
    CodeCheck = 0x1
   Test := "0x" Test A_LoopField
   Code_C := Mod(Test - Code%CodeCheck% + 0x100, 0x100)
   TextCheck0 .= Chr(Code_C)
   Test =
  }
  Else
   Test .= A_LoopField
 }
 SetFormat, integer, %A_FormatIntegerRec%
 return TextCheck0
}

_________________
Back to top
View user's profile Send private message
Rhys



Joined: 17 Apr 2007
Posts: 722
Location: Florida

PostPosted: Mon Feb 18, 2008 3:20 pm    Post subject: Reply with quote

Thanks for sharing, this is really fun to use. The GUI makes it very simple to play around with. I wonder how secure this is, but I don't know enough about crypto to find out (yet). I've read some really interesting discussions on this forum about it, though.

Can someone tell me what this says?
662deab67f4e1ae2a7604dceefb084ff0edbb4354f10d8a32f4e0cd7af36f213d7a91c2503c5477b2cf8727e511beead45
_________________
[Join IRC!]
Back to top
View user's profile Send private message
scottmeyer



Joined: 29 Jul 2007
Posts: 13

PostPosted: Mon Feb 18, 2008 11:07 pm    Post subject: Reply with quote

Hi !

I actually wish to remove "Gui, Add, Edit, vCode"!

But if I do, and I try to replace this line:
Code = Key Phrase

It is no longer working ...

An idea? Question

[ EDIT ]
Thank You for your help, it's ok, this program is excellent ^^


Last edited by scottmeyer on Sat Mar 08, 2008 11:33 am; edited 1 time in total
Back to top
View user's profile Send private message
Rhys



Joined: 17 Apr 2007
Posts: 722
Location: Florida

PostPosted: Tue Feb 19, 2008 2:53 am    Post subject: Reply with quote

@ScottMeyer: It doesn't like certain key phrases for some reason. I didn't look too closely, but there's a function that checks the key phrase you use for something.

This worked for me (commented out two lines and added a definition of the Code variable:
Code:
Gui, Add, Edit, vText w300 h300
;Gui, Add, Edit, vCode w100, Code
Gui, Add, Button, gEncrypt, Encrypt
Gui, Show,, Encrypt - EncryptUtility
return

Encrypt:
;GuiControlGet, Code
Code:="pass_word"
GuiControlGet, Text
GuiControl,, Text, % CodeCheck(Text, Code)
return

_________________
[Join IRC!]
Back to top
View user's profile Send private message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Tue Feb 19, 2008 3:25 am    Post subject: Reply with quote

If password not long enough to encrypt the text, decryption attempt would probably be as simple as detecting the number of invalid characters. But if conversion method using only valid characters, the number of invalid would be 0, and how secure it is probably would depend on ENum^PL (ENum = the number of valid characters in the conversion list, PL = the length of password but not more than that of text). Another advantage of valid character conversion is to avoid the double file size problem ~

Conversion method similar to following would be recommended if text using only Chr(9) and Chr(32) ~ Chr(126) ...
Code:
Conversion(String, Option = "c")
{
 If Option = c
  If String = 0
   return Chr(9)
  Else
   return Chr(String + 31)
 Else
  If (String = Chr(9))
   return Asc(Chr(9))
  Else
   return Asc(String) - 31
}


Remove code parameter of TextCheck() function
Code:
Gui, Add, Edit, vText w360, 9009a33f7838ea92295cd15010c647f79325b0c4853fc150ee8e2e
Gui, Add, Button, gDecrypt, OK
Gui, Show,, Decrypt - EncryptUtility
return

Decrypt:
GuiControlGet, Code
GuiControlGet, Text
GuiControl,, Text, % TextCheck(Text)
return

TextCheck(String)
{
 Code = test_key ; replace test_key
 A_FormatIntegerRec := A_FormatInteger
 SetFormat, integer, hex
 Loop, Parse, Code
  CodeCheck := SubStr(Asc(A_LoopField), 3) CodeCheck
 Test := Round(StrLen(CodeCheck) / 2 + 1)
 CodeCheckRec := Mod(Mod("0x" . CodeCheck, 1001), 0x100)
 _Code%Test% := CodeCheckRec
 Test =
 Loop, Parse, CodeCheck
 {
  If Test <>
  {
   Code0 += 1
   _Code%Code0% := "0x" . Test . A_LoopField
   _Code%Code0% += CodeCheckRec
   _Code%Code0% := Mod(_Code%Code0%, 0x100)
   CodeCheckRec := _Code%Code0%
   Test =
  }
  Else
   Test .= A_LoopField
 }
 If (StrLen(Code) <= StrLen(String))
  Code0 += 1
 Loop %Code0%
 {
  ANum := Code0 - A_Index + 1
  Code%ANum% := _Code%A_Index%
 }
 CodeCheck = 0
 Loop, Parse, String
 {
  If Test <>
  {
   CodeCheck += 1
   If (CodeCheck > Code0)
    CodeCheck = 0x1
   Test := "0x" Test A_LoopField
   Code_C := Mod(Test - Code%CodeCheck% + 0x100, 0x100)
   TextCheck0 .= Chr(Code_C)
   Test =
  }
  Else
   Test .= A_LoopField
 }
 SetFormat, integer, %A_FormatIntegerRec%
 return TextCheck0
}

_________________
Back to top
View user's profile Send private message
Rhys



Joined: 17 Apr 2007
Posts: 722
Location: Florida

PostPosted: Tue Feb 19, 2008 4:28 am    Post subject: Reply with quote

As I said, I'm really not well-versed in crypto theory, but I had an idea today that may or may not have merit. To me, a potential way to defeat (or at least make much more difficult) decryption attacks is to make your original message less like 'normal' text.

For example, eliminating vowels (which often results in semi-understandable messages) or even scrambling the middle letters of words.

Example 1:
Fr xmpl, lmntng vwls (whch oftn rslts n sm-ndrstndbl mssgs) r vn scrmblng th mddl lttrs f wrds.
Example 2:
For elampxe, eilniitmang vlwoes (wchih oeftn rltuess in semi-urdtnsbnldaeae messages) or even smalncibrg the mdilde lettres of wrods.

Obviously these methods aren't without their drawbacks - Short words are harder to understand in the first example and are not scrambled in the second. This could be minimized by using longer words, but neither is a perfect way to obfuscate a secret message prior to encryption. This type of obfuscation is also (for lack of a better term) lossy, and could create ambiguity where it isn't welcome (maybe my recipient would laminate all of his vowels instead of eliminating them!).

In the case of the missing vowels, it might even aid decryption if the attacker is able to detect a reduced character set (or increased occurance of 1-3 letter words) and deduce that there are no vowels in the message.

I thought it would be cool if there were a way to easily obfuscate the text of a secret message that is perfectly readable, even after obfuscation. In that case, decryption attempts (I think) would be much more difficult with very little lost functionality, especially in contrast to the two above.

What I suggest would be a function that runs before the secret message is encrypted that converts most characters to a random character that is identical, except for an accent.

Example 3:
Add random accents to some letters like this.
Âdd řåñďom acċèntś tö śõmë leťŧerş ļîkè tĥĩs.


Wouldn't that make malicious decryption much more difficult but also be very easy to obfuscate / de-obfuscate (sorry if these are incorrect terms!) the text with very little 'loss' (you'd lose any 'valid' accents, señor!)? If de-obfuscation is a weak point, it isn't really necessary to understand the obfuscated message. Maybe this method is already known and used, but if not, why not?

Edit: Another benefit to this method is that the same message would never look the same even if encrypted with the same key, since the characters would be different each time.
_________________
[Join IRC!]
Back to top
View user's profile Send private message
Sakurako



Joined: 10 May 2007
Posts: 142

PostPosted: Tue Feb 19, 2008 6:59 pm    Post subject: Reply with quote

Not sure whether vowel encryption would work on US/UK system or not, but probably difficult to support international mode ~
_________________
Back to top
View user's profile Send private message
Lawrence



Joined: 20 Feb 2008
Posts: 4

PostPosted: Fri Feb 22, 2008 7:37 am    Post subject: Reply with quote

Your script here is so cooooooool. I used it in my program.. thank you!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You can post new topics in this forum
You can reply to topics in this forum


Powered by phpBB © 2001, 2005 phpBB Group