Click here to Skip to main content
15,867,308 members
Articles / Desktop Programming / Windows Forms
Article

Lock

Rate me:
Please Sign up or sign in to vote.
1.43/5 (11 votes)
27 Nov 2007CPOL1 min read 42.8K   532   8   17
LOCK is used to lock and unlock the files using symmetric key cryptography

Introduction<o:p>

This article shows a classical approach to lock a file so that it doesn't reveal its original content in any software. For locking a file, a password is required. To view the file again in its original form, it has to be unlocked with the LOCK software with the same password which was used to lock the file.

Background <o:p>

The basic approach used is the symmetric key cryptography. The file is converted into blocks of 8 bytes and repeatedly XORed with the similar block of 8 bytes obtained by the password. Because the encryption used is symmetric key cryptography, the same process is used for unlocking\decryption.

Using the code<o:p>

Following is the code for main encryption routine. For more details, look at source code for the comments.

// Replicate the byte array in the key buffer to create
         // an encryption key whose size equals or exceeds the
         // size of the I/O buffer
         int count = (1024 + keyBytes.Length-1)/keyBytes.Length;
                 for( int i=0 ; i<count ; i++)
                 Array.Copy( keyBytes , 0 , keybuf , i*keyBytes.Length , keyBytes.Length);
        // Read the file in bufsize blocks, XOR-encrypt each block,
         // and write the encrypted block back to the file
         long lBytesRemaining = stream.Length;
         while (lBytesRemaining>0)
         {
                 long lPosition = stream.Position ;
                 int nBytesRequested = (int)System.Math.Min(bufSize , lBytesRemaining); 
                 int nBytesRead = reader.Read (buffer, 0, nBytesRequested)

                 for (int i=0; i<nBytesRead; i++)
                          buffer[i] ^= keybuf[i];Stream.Seek (lPosition, SeekOrigin.Begin);
                          writer.Write (buffer, 0, nBytesRead);
                          lBytesRemaining -= nBytesRead;
            }                   

Screenshots<o:p>

Screenshot - mainScreenShot.gif
<o:p>

Points of Interest<o:p>

This is my second article at code project. For the first article which about Handling the Big Numbers, click here. I donot have much experience of article writing. I have just tried to minimize the shortcomings I have faced drafting the First article. Suggestion regarding the clarity, confusion, code, technical writing are welcomed. Comments are also welcomed. You can also mail me at funatlearn@ontheedge.co.in with subject Lock Code Project Article regarding the same.

History<o:p>

This is the first version of the program. I have some inputs for the next version of the code. I am expecting some more inputs from the readers of the code. After finalizing all the inputs I would write next version of the code.

If you feel any shortcoming of this code/article, please leave a message about the same, so that these pitfalls may not appear in the subsequent versions.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
India India
Software Engineer based out in Noida.

Technology skillset – .NET, WPF, WCF, LINQ, XAML.

Started blogging on http://1wpf.wordpress.com/


Stackoverflow Profile -> http://stackoverflow.com/users/649524/tilak

Comments and Discussions

 
GeneralYikes. Pin
Rich Insley27-Nov-07 9:13
Rich Insley27-Nov-07 9:13 
GeneralRe: Yikes. Pin
Fun@learn27-Nov-07 17:25
Fun@learn27-Nov-07 17:25 
GeneralRe: Yikes. Pin
Rich Insley27-Nov-07 17:53
Rich Insley27-Nov-07 17:53 
GeneralRe: Yikes. Pin
Ri Qen-Sin27-Nov-07 18:29
Ri Qen-Sin27-Nov-07 18:29 
AnswerRe: Yikes. Pin
Fun@learn27-Nov-07 18:49
Fun@learn27-Nov-07 18:49 
GeneralRe: Yikes. Pin
Rich Insley28-Nov-07 6:08
Rich Insley28-Nov-07 6:08 
Fun@learn wrote:
Rather than improvement, it is just a restructring of the code.


If you don't think that's an improvement, you should do more research. Much more research.

Fun@learn wrote:
Regarding the buffer size, if a file buffer of 3 gig can be made, than another buffer for the key can be made.


How much frigging system memory do you have that creating a 3 gig buffer in system memory is such a trivial thing?

Fun@learn wrote:
Anyway, the improvements shown would appear in the updates of the code


I'm pretty sure this article is on a rocket train to Purgatory. You might want to hurry or just cut your losses and do some more research.
GeneralRe: Yikes. Pin
Ri Qen-Sin28-Nov-07 8:22
Ri Qen-Sin28-Nov-07 8:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.