AutoHotkey Community

It is currently May 27th, 2012, 10:43 am

All times are UTC [ DST ]




Post new topic Reply to topic  [ 18 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: Encrypt Utility
PostPosted: February 9th, 2008, 2:42 am 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
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/viewtop ... 459#177459
Previous Version (Original Function Version) http://www.autohotkey.com/forum/viewtop ... 371#177371
Original Version http://www.autohotkey.com/forum/viewtop ... 597#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
}

_________________
Sakurako ^_^


Last edited by Sakurako on April 4th, 2008, 4:12 pm, edited 5 times in total.

Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 9th, 2008, 12:26 pm 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
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
}

_________________
Sakurako ^_^


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 9th, 2008, 10:49 pm 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
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
}

_________________
Sakurako ^_^


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Re: Encrypt Utility
PostPosted: February 10th, 2008, 8:24 pm 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
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

_________________
Sakurako ^_^


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 15th, 2008, 5:02 am 
Offline

Joined: February 12th, 2008, 6:20 am
Posts: 25
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.


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 15th, 2008, 6:47 am 
Offline

Joined: April 22nd, 2007, 6:33 pm
Posts: 1833
just put a password and /nodecompile switch when you compile


Report this post
Top
 Profile  
Reply with quote  
PostPosted: February 17th, 2008, 2:29 pm 
Offline

Joined: July 29th, 2007, 10:30 pm
Posts: 19
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


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 18th, 2008, 2:32 am 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
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
}

_________________
Sakurako ^_^


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 18th, 2008, 3:20 pm 
Offline

Joined: April 17th, 2007, 1:37 pm
Posts: 761
Location: Florida
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!]
Image


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 18th, 2008, 11:07 pm 
Offline

Joined: July 29th, 2007, 10:30 pm
Posts: 19
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? :?:

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


Last edited by scottmeyer on March 8th, 2008, 11:33 am, edited 1 time in total.

Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 19th, 2008, 2:53 am 
Offline

Joined: April 17th, 2007, 1:37 pm
Posts: 761
Location: Florida
@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!]
Image


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 19th, 2008, 3:25 am 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
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
}

_________________
Sakurako ^_^


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 19th, 2008, 4:28 am 
Offline

Joined: April 17th, 2007, 1:37 pm
Posts: 761
Location: Florida
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 lettersof 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!]
Image


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 19th, 2008, 6:59 pm 
Offline

Joined: May 10th, 2007, 2:52 am
Posts: 194
Location: China/ Canada
Not sure whether vowel encryption would work on US/UK system or not, but probably difficult to support international mode ~

_________________
Sakurako ^_^


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 22nd, 2008, 7:37 am 
Offline

Joined: February 20th, 2008, 11:20 am
Posts: 5
Your script here is so cooooooool. I used it in my program.. thank you!


Report this post
Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 18 posts ]  Go to page 1, 2  Next

All times are UTC [ DST ]


Who is online

Users browsing this forum: No registered users and 16 guests


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group