Generate Decrypted Data
URL (JSONP)
  Loaded    Just click Input to manually input data.
Password
Plaintext
Control    Click before looking at the Output or JSONP.
Show:    Hash    Input    Output    JSONP

	      
Input
Output
JSONP
Generate Encrypted Data
URL (JSONP)
  Loaded    Just click Input to manually input data.
Password
Plaintext
Control    Click before looking at the Output or JSONP.
Show:    Hash    Input    Output    JSONP

	      
Input
Output
JSONP
Generate Passwords
Fixed
Core Transliterate    Swap
Prefix
Suffix

Sets
Set Freq Dups

Result
Configuration Management
Wait Time: ms
Help

1 Introduction

This tool allows you manage your private data using HTML5 and client side javascript. You can generate passwords, read your encrypted data safely from anywhere on the web over HTTP or HTTPS connections.

2 Compatibility

This is the list of browsers that I have tested on.
Browser Version Status
Firefox15.0.1works
Google Chrome23.0.1271.17works
Internet Explorer9.0.8112.16421works
Because it uses newer constructs like prop() instead of attr() I expect that it wil have problems in older browsers.

3 Encryption/Decryption

Your web based encrypted data is read using JSONP techology so it transferred as encrypted data and is decrypted locally by javascript in your browser. This means that your unencrypted data is never exposed to the internet or a server.

One drawback of this approach is that you cannot write encrypted data to a local file because of cross site domain restrictions. You can workaround this by entering the data in the input field of the Encrypt tab and encrypt it. At this point you can access the JSONP data. You can then select the JSONP data and cut-n-paste it into your file.

There are two ways to input data for encryption and decryption. You can input the data manually by typing or using cut-n-paste or you can upload a JSONP file.

Entering the data manually is a little bit tricky. You have to select the Decrypt or Encrypt tab and click the . When the input text area appears, click on the button.

The button initiates the asynchronous load of a JSONP file. The Loaded checkbox indicates when the file has been successfully uploaded. It is read-only which means that it can only be changed internally.

The Password text box is where you type in the password that you want to use to encrypt or decrypt the file. It is the master password that controls access to your data. Make it strong! When the Plaintext checkbox is checked, the password is displayed in plaintext. It makes it easier to check long, complex passwords.

The control section has the button that runs the encryption/decryption algorithm using the input data and the password.

The on the Encrypt tab page encrypts the input data using the password.

The on the Decrypt tab page encrypts the input data using the password.

The show fields are checkboxes that when checked cause text data to be displayed.

The Hash displays the password hash (SHA-256).

The Input displays the input data.

The Output displays the output or generated data.

The JSONP displays the output or generated data in JSONP format which is simply the output data formatted as a javascript function call. The function remote_data_getter is defined internally.

4 Passwords

You can also use this system to generate passwords.

The core, prefix and suffix fields are fixed fields which means that there are no permutations associated with it. When the Transliteration is checked, it translates characters like o ("oh") to 0 (zero). It only translates the first occurrence of each one. When the Swap is checked, it does a pairwise swap of the characters. If there is an odd number of characters, a character is appended to make it even.

5 Configure

The configuration section only has on parameter. It is the time that the system waits for the JSONP file to load. It is currently 1 second (1,000 ms). On a very slow internet connection, you might have to increase it.

6 Acknowledgements

The encryption algorithm is based on AES-256-CBC. This system uses the crypto-js library from: http://code.google.com/p/crypto-js/.

It also uses the HTML5 compatibility library: http://html5boilerplate.com/

In addition it makes extensive use of the jquery and jquery-ui libraries.

7 License

Copyright (©) 2012 by Joe Linoff

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.