Software
Last update: 07/04/09
Summary
Most of my software is intended for pedagogical purposes and demonstrates how computer programming enhances mathematical and scientific education. I did not intend to release fully debugged products, so don't be surprised if you encounter a program with minor glitches.
Flashcards

Written in Java, this program allows you to create a set of flashcards that could contain image and text, and then test yourself on the knowledge of the subject. This application has been thoroughly tested and is ready for use. Each flashcard is an instance of class and the full set of flashcards constitutes a collection of type Vector. Java in-built serialization mechanism allows for externalization of objects and their reload in a few lines of code. Thus the files stored by the program are in binary format. This program is a testament to versatility Java provides for the programming community.
Flashcards application and source.
File Protector
Designed for most basic file protection, this utility explores byte nature of information stored on digital media. In principal, every file stored on computer is a sequence of bytes. Different files contain different byte sequences understood by specifically designed computer programs. For example, files with extension '.doc' are generated by Microsoft Word to store electronically formatted documents. Music files, e.g. mp3, store digitized sound. The byte nature of files allows one to easily protect information stored in them by subjecting every byte to some mathematical manipulation. File Protector allows three operations: byte inversion, byte cycling and Xor.
The idea behind byte inversion is to literally invert each byte. For example, if byte is encoded by 10001000 then inverted version of this byte will be 01110111. Such transformation is simple to encode and is sufficiently fast. If, however, it is necessary to protect the entire file, one may face necessity of encoding huge chunks of data. In that case, it is important to back up the original version and realize that the algorithm has its speed limitations. In particular, this program will load a block of 65536 bytes and invert them, then it will write the inverted block into the file. The reason for such "chunky" encoding is because large files cannot be safely loaded into the memory due to memory allocation limits.
Byte cycling is another manipulation on every single byte. Again, suppose the binary version of byte is 10101010. Then the cycled version is 01010101. Thus the algorithm flips every two consecutive bytes.
Xor (exclusive or) operation requires two bytes to produce a third. Consequently user has to locate a second file which would serve as the 'key' for the protected file. The basic idea is if you have bytes A and B then A xor B = C. However, A xor C = B. In principle, this operation 'splits' the byte into two: the new version and the corresponding byte in key file. Recovery of protected file is possible only in case if user has the key file.
There are some peculiarities to Xor protection. If A is a byte then A xor 0 = A. Therefore, user must make sure that key file is not composed of excessively long sequence of null bytes. Another feature of this 'one-time pad' is file size limitations. Protection by Xor operation requires key file to be at least as large as the message file. To read more about Xor, visit this page. Please keep in mind that File Protector is intended only for most basic file security and in no way qualifies for encryption/cryptography.
Click here to download File Protector executable and source code in C++.