Home
Password Protection
Text Encryption
This JavaScript library provides encryption using simple, text-oriented method called column transposition. The idea is to write the plain text in block on the row-first bases. The text is then read column-first. The trick is in that the columns are not read from left to right, but in the order specified by the encryption key. Transliteration is also used.
Instructions:
Input the password into the password field.
Optionally, input the signature into the signature field:
Input the plain text into the plain text field.
Press the SECURE button and observe the encrypted text.
Press the UNSECURE button and look at the decrypted text.
Check the 'new lines used' if you used new lines in the plain text
The JavaScript Source: Password Protection: Text Encryption
Simply click inside the window below, use your cursor to highlight the script, and copy (type Control-c or Apple-c) the script into a new file in your text editor (such as Note Pad or Simple Text) and save (Control-s or Apple-s). The script is yours!!!
<!-- TWO STEPS TO INSTALL TEXT ENCRYPTION:
1. Copy the coding into the HEAD of your HTML document
2. Add the last code into the BODY of your HTML document -->
<!-- STEP ONE: Paste this code into the HEAD of your HTML document -->
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- Original: Tomislav Sereg (tsereg@net.hr) -->
<!-- Web Site: http://www.inet.hr/~tsereg/jse -->
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
<!-- Begin
function doSecure() {
alert( 'JavaScript 1.2 or above required.' );
}
function doUnsecure() {
alert( 'JavaScript 1.2 or above required.' );
}
// End -->
</script>
<script language="JavaScript1.2">
<!-- Begin
function permutationGenerator(nNumElements) {
this.nNumElements = nNumElements;
this.antranspositions = new Array;
var k = 0;
for (i = 0; i < nNumElements - 1; i++)
for (j = i + 1; j < nNumElements; j++)
this.antranspositions[ k++ ] = ( i << 8 ) | j;
// keep two positions as lo and hi byte!
this.nNumtranspositions = k;
this.fromCycle = permutationGenerator_fromCycle;
}
function permutationGenerator_fromCycle(anCycle) {
var anpermutation = new Array(this.nNumElements);
for (var i = 0; i < this.nNumElements; i++) anpermutation[i] = i;
for (var i = 0; i < anCycle.length; i++) {
var nT = this.antranspositions[anCycle[i]];
var n1 = nT & 255;
var n2 = (nT >> 8) & 255;
nT = anpermutation[n1];
anpermutation[n1] = anpermutation[n2];
anpermutation[n2] = nT;
}
return anpermutation;
}
function password(strpasswd) {
this.strpasswd = strpasswd;
this.getHashValue = password_getHashValue;
this.getpermutation = password_getpermutation;
}
function password_getHashValue() {
var m = 907633409;
var a = 65599;
var h = 0;
for (var i = 0; i < this.strpasswd.length; i++)
h = (h % m) * a + this.strpasswd.charCodeAt(i);
return h;
}
function password_getpermutation() {
var nNUMELEMENTS = 13;
var nCYCLELENGTH = 21;
pg = new permutationGenerator(nNUMELEMENTS);
var anCycle = new Array(nCYCLELENGTH);
var npred = this.getHashValue();
for (var i = 0; i < nCYCLELENGTH; i++) {
npred = 314159269 * npred + 907633409;
anCycle[i] = npred % pg.nNumtranspositions;
}
return pg.fromCycle(anCycle);
}
function SecureContext(strText, strSignature, bEscape) {
this.strSIGNATURE = strSignature || '';
this.bESCApE = bEscape || false;
this.strText = strText;
this.escape = SecureContext_escape;
this.unescape = SecureContext_unescape;
this.transliterate = SecureContext_transliterate;
this.encypher = SecureContext_encypher;
this.decypher = SecureContext_decypher;
this.sign = SecureContext_sign;
this.unsign = SecureContext_unsign;
this.secure = SecureContext_secure;
this.unsecure = SecureContext_unsecure;
}
function SecureContext_escape(strToEscape) {
var strEscaped = '';
for (var i = 0; i < strToEscape.length; i++) {
var chT = strToEscape.charAt( i );
switch(chT) {
case '\r': strEscaped += '\\r'; break;
case '\n': strEscaped += '\\n'; break;
case '\\': strEscaped += '\\\\'; break;
default: strEscaped += chT;
}
}
return strEscaped;
}
function SecureContext_unescape(strToUnescape) {
var strUnescaped = '';
var i = 0;
while (i < strToUnescape.length) {
var chT = strToUnescape.charAt(i++);
if ('\\' == chT) {
chT = strToUnescape.charAt( i++ );
switch( chT ) {
case 'r': strUnescaped += '\r'; break;
case 'n': strUnescaped += '\n'; break;
case '\\': strUnescaped += '\\'; break;
default: // not possible
}
}
else strUnescaped += chT;
}
return strUnescaped;
}
function SecureContext_transliterate(btransliterate) {
var strDest = '';
var nTextIter = 0;
var nTexttrail = 0;
while (nTextIter < this.strText.length) {
var strRun = '';
var cSkipped = 0;
while (cSkipped < 7 && nTextIter < this.strText.length) {
var chT = this.strText.charAt(nTextIter++);
if (-1 == strRun.indexOf(chT)) {
strRun += chT;
cSkipped = 0;
}
else cSkipped++;
}
while (nTexttrail < nTextIter) {
var nRunIdx = strRun.indexOf(this.strText.charAt(nTexttrail++));
if (btransliterate) {
nRunIdx++
if (nRunIdx == strRun.length) nRunIdx = 0;
}
else {
nRunIdx--;
if (nRunIdx == -1) nRunIdx += strRun.length;
}
strDest += strRun.charAt(nRunIdx);
}
}
this.strText = strDest;
}
function SecureContext_encypher(anperm) {
var strEncyph = '';
var nCols = anperm.length;
var nRows = this.strText.length / nCols;
for (var i = 0; i < nCols; i++) {
var k = anperm[ i ];
for (var j = 0; j < nRows; j++) {
strEncyph += this.strText.charAt(k);
k += nCols;
}
}
this.strText = strEncyph;
}
function SecureContext_decypher(anperm) {
var nRows = anperm.length;
var nCols = this.strText.length / nRows;
var anRowOfs = new Array;
for (var i = 0 ; i < nRows; i++) anRowOfs[ anperm[ i ] ] = i * nCols;
var strplain = '';
for (var i = 0; i < nCols; i++) {
for (var j = 0; j < nRows; j++)
strplain += this.strText.charAt(anRowOfs[ j ] + i);
}
this.strText = strplain;
}
function SecureContext_sign(nCols) {
if (this.bESCApE) {
this.strText = this.escape(this.strText);
this.strSIGNATURE = this.escape(this.strSIGNATURE);
}
var nTextLen = this.strText.length + this.strSIGNATURE.length;
var nMissingCols = nCols - (nTextLen % nCols);
var strpadding = '';
if (nMissingCols < nCols)
for (var i = 0; i < nMissingCols; i++) strpadding += ' ';
var x = this.strText.length;
this.strText += strpadding + this.strSIGNATURE;
}
function SecureContext_unsign(nCols) {
if (this.bESCApE) {
this.strText = this.unescape(this.strText);
this.strSIGNATURE = this.unescape(this.strSIGNATURE);
}
if ('' == this.strSIGNATURE) return true;
var nTextLen = this.strText.lastIndexOf(this.strSIGNATURE);
if (-1 == nTextLen) return false;
this.strText = this.strText.substr(0, nTextLen);
return true;
}
function SecureContext_secure(strpasswd) {
var passwd = new password(strpasswd);
var anperm = passwd.getpermutation()
this.sign(anperm.length);
this.transliterate(true);
this.encypher(anperm);
}
function SecureContext_unsecure(strpasswd) {
var passwd = new password(strpasswd);
var anperm = passwd.getpermutation()
this.decypher(anperm);
this.transliterate(false);
return this.unsign(anperm.length);
}
// End -->
</script>
<script language="JavaScript1.2">
<!-- Begin
function doSecure() {
var sc = new SecureContext(document.frmSecurity.txtUnsecure.value,
document.frmSecurity.txtSign.value, document.frmSecurity.chkNewLines.checked);
sc.secure(document.frmSecurity.txtPassw.value);
document.frmSecurity.txtSecure.value = sc.strText;
document.frmSecurity.txtUnsecure.value = '';
}
function doUnsecure() {
var sc = new SecureContext(document.frmSecurity.txtSecure.value,
document.frmSecurity.txtSign.value, document.frmSecurity.chkNewLines.checked);
if (!sc.unsecure(document.frmSecurity.txtPassw.value))
alert('Invalid password used.');
document.frmSecurity.txtSecure.value = '';
document.frmSecurity.txtUnsecure.value = sc.strText;
}
// End -->
</script>
</HEAD>
<!-- STEP TWO: Copy this code into the BODY of your HTML document -->
<BODY>
<center>
<table border=1>
<tr>
<td>Instructions:<p>
<ol>
<li>Input the password into the password field.</li>
<li>Optionally, input the signature into the signature field:</li>
<li>Input the plain text into the plain text field.</li>
<li>Press the SECURE button and observe the encrypted text.</li>
<li>Press the UNSECURE button and look at the decrypted text.</li>
<li>Check the 'new lines used' if you used new lines in the plain text</li>
</ol>
<form name=frmSecurity>
<p>Password: <input type=text name=txtPassw size=20 value="12345678">
Optional signature: <input type=text name=txtSign size=20><br>
<input type=checkbox name=chkNewLines value="1"> New lines used</p>
<table border=0>
<tr>
<td><p>Plain text:</p></td>
<td></td>
<td><p>Encrypted text:</p></td>
</tr>
<tr>
<td><textarea rows=4 name=txtUnsecure cols=20 wrap=virtual>the quick brown fox jumps over the lazy dog</textarea></td>
<td align=center><input type=button value="SECURE >>"
name=btnSecure onclick="doSecure()"><br>
<input type=button value="<< UNSECURE"
name=btnUnsecure onclick="doUnsecure()"></td>
<td><textarea rows=4 name=txtSecure cols=20 wrap=virtual></textarea></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</center>
Free JavaScripts provided
by The JavaScript Source
<!-- Script Size: 8.32 KB -->
Did you use this script? Do you like this site? Please link to us!