Vigenere encode and decode
|
|
<html> <head> <title>Vignere Cipher</title> <!-- CryptoMX Tools Copyright (C) 2004 - 2006 Derek Buitenhuis
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --> </head> <body bgcolor=#FFFFFF text=#000000> <td> <script> function Vigenere (input, key, forward) { if (key == null) key = ""; var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz";
// Validate key: key = key . toUpperCase (); var key_len = key . length; var i; var adjusted_key = ""; for (i = 0; i < key_len; i ++) { var key_char = alphabet . indexOf (key . charAt (i)); if (key_char < 0) continue; adjusted_key += alphabet . charAt (key_char); } key = adjusted_key; key_len = key . length; if (key_len == 0) { alert ('You forgot to supply a key!'); key = "a"; key_len = 1; }
// Transform input: var input_len = input . length; var output = ""; var key_index = 0; var in_tag = false; for (i = 0; i < input_len; i ++) { var input_char = input . charAt (i); if (input_char == "<") in_tag = true; else if (input_char == ">") in_tag = false; if (in_tag) { output += input_char; continue; } var input_char_value = alphabet . indexOf (input_char); if (input_char_value < 0) { output += input_char; continue; } var lowercase = input_char_value >= 26 ? true : false; if (forward) input_char_value += alphabet . indexOf (key . charAt (key_index)); else input_char_value -= alphabet . indexOf (key . charAt (key_index)); input_char_value += 26; if (lowercase) input_char_value = input_char_value % 26 + 26; else input_char_value %= 26; output += alphabet . charAt (input_char_value); key_index = (key_index + 1) % key_len;
} return output; }
function runcoder (dir) { document . form . output . value = Vigenere (document . form . input . value, document . form . key . value, dir); /* A bug in IE prevents this section from working correctly. with (document . form) { output . value = Vigenere (input . value, key . value, dir); } */ } </script> <form name=form> <table border cellspacing="2"> <tr> <td> Input:<br> <input type=button onClick="this.form.input.value='';" value="clear"> </td> <td> <textarea name=input rows=10 cols=60 wrap=virtual></textarea> </td> </tr> <tr> <td> Key:<br> <input type=button onClick="this.form.key.value='';" value="clear"> </td> <td> <textarea name=key rows=5 cols=60 wrap=virtual></textarea> </td> </tr> <tr> <td>Coding direction:</td> <td> <input type=button value="encode" onClick="runcoder (true);"> <input type=button value="decode" onClick="runcoder (false);"> </td> </tr> <td> Output:<br> <input type=button onClick="this.form.output.value='';" value="clear"> </td> <td> <textarea name=output rows=10 cols=60 wrap=virtual></textarea> </td> </table> </form> </body> </html>
|
|
|
|
|
|
|