| 
<html>
 <head>
 <!--
 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.
 -->
 <title>Modular Transpose Encryption</title>
 <!-- mfunc.js -->
 <script>
 var MCarr=new Array(
 "*","|",".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",
 ".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","-----",".----","..---","...--","....-",
 ".....","-....","--...","---..","----."
 );
 var ABC012arr="*|ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
 function DoMorseDecrypt(x)
 {mess="";apos=0;bpos=0;
 while(bpos<x.length)
 {
 bpos=x.indexOf(" ",apos);if(bpos<0){bpos=x.length};
 dits=x.substring(apos,bpos);apos=bpos+1;let="";
 for(j=0;j<MCarr.length;j++){  if(dits==MCarr[j]){let=ABC012arr.charAt(j)}  };
 if(let==""){let="*"};
 mess+=let;
 };
 return mess;
 };
 
 function DoMorseEncrypt(x)
 {mess="";
 for(i=0;i<x.length;i++)
 {
 let=x.charAt(i).toUpperCase();
 for(j=0;j<MCarr.length;j++){  if(let==ABC012arr.charAt(j)){mess+=MCarr[j]}  };
 mess+=" ";
 };
 mess=mess.substring(0,mess.length-1);
 return mess;
 };
 
 
 function DoReverse(x){y="";for(i=0;i<x.length;i++){y+=x.charAt(x.length-1-i);};return y};
 
 
 function DoCaeserEncrypt(x,shf)
 {
 abc="abcdefghijklmnopqrstuvwxyz";
 ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 r1="";r2="";shf=eval(shf);
 for(i=0;i<x.length;i++){let=x.charAt(i);pos=ABC.indexOf(let);if(pos>=0){r1+=ABC.charAt(  (pos+shf)%26  )}else{r1+=let};};
 for(i=0;i<r1.length;i++){let=r1.charAt(i);pos=abc.indexOf(let);if(pos>=0){r2+=abc.charAt(  (pos+shf)%26  )}else{r2+=let};};
 return r2;
 };
 
 function DoCaeserDecrypt(x,shf)
 {return DoCaeserEncrypt(x,26-shf);};
 
 
 function MakeCipherABC(abc,key1)
 {
 abc=abc.toUpperCase();key1=key1.toUpperCase();
 cyabc=key1+abc;
 for(i=0;i<abc.length;i++){let=cyabc.charAt(i);pos=cyabc.indexOf(let,i+1);
 while(pos>-1){cyabc=cyabc.substring(0,pos)+cyabc.substring(pos+1,cyabc.length);pos=cyabc.indexOf(let,i+1);};};
 return cyabc;
 }
 
 
 function DoVigenere(et,key1,key2,abc,dir,vigtype,altluabc)
 {dt="";et=et.toUpperCase();key1=key1.toUpperCase();key2=key2.toUpperCase();abc=abc.toUpperCase();dir=dir.toUpperCase();
 pos=et.indexOf(" ");
 while(pos>-1){et=et.substring(0,pos)+et.substring(pos+1,et.length);pos=et.indexOf(" ");};
 cyabc=MakeCipherABC(abc,key1);
 key1=cyabc;
 lu=cyabc;
 if(vigtype=="N"){lu=abc};
 if(vigtype=="K"){lu=cyabc};
 if(vigtype=="A"){lu=altluabc};
 for(i=0;i<et.length;i++)
 {let=et.charAt(i);letinabc=abc.indexOf(let);
 if(letinabc<0){dt+=let;et=et.substring(0,i)+et.substring(i+1,et.length);i--}
 else{
 if(dir=="E"){dt+=lu.charAt((key1.indexOf(let)+key1.length+key1.indexOf(key2.charAt(i%key2.length)))%key1.length);};
 if(dir=="D"){dt+=lu.charAt((key1.indexOf(let)+key1.length-key1.indexOf(key2.charAt(i%key2.length)))%key1.length);};};
 
 };
 return dt;};
 
 function DoFreqCnt(x,abc)
 {var i,abc,pos,freqs;
 pos=x.indexOf(" ");while(pos>-1){x=x.substring(0,pos)+x.substring(pos+1,x.length);pos=x.indexOf(" ");};
 x=x.toUpperCase();freqs="";
 letarr=new Array("");
 for(i=0;i<abc.length;i++){letarr[i]=0;};
 for(i=0;i<x.length;i++){letarr[abc.indexOf(x.charAt(i))]++};
 for(i=0;i<abc.length;i++){freqs+=abc.charAt(i)+":"+letarr[i]+"/"+x.length+"="+letarr[i]/x.length+"\n";};
 return freqs;
 }
 
 function DoRowColumnTranspose(et,rowcol,jump,startrow)
 {dt="";if((et=="")||(rowcol=="")||(jump=="")||(startrow=="")){dt="You must supply all values";return dt;}
 maxrow=eval(rowcol.substring(0,rowcol.indexOf(",")));
 maxcol=eval(rowcol.substring(rowcol.indexOf(",")+1,rowcol.length));
 jump=eval(jump);startrow=eval(startrow);
 if(startrow>maxrow){dt="Start Row must be <= Max Rows";return dt;}
 lin=new Array("");
 for(i=0;i<maxrow;i++){lin[i]=et.substring(maxcol*i,maxcol*(i+1))};
 row=startrow-1;col=maxcol-1;//starting point
 for(i=0;i<(maxrow*maxcol);i++)
 {dt+=lin[row].charAt(col);
 row=row+jump;
 while(row>=maxrow){row-=maxrow;col-=1;};
 while(col<=-1){col+=maxcol;row-=1;};
 while(row<=-1){row+=maxrow;col-=1;};
 while(col>=maxcol){col-=maxcol;row-=1;};
 };
 return dt;};
 
 
 function DoModTranspose(et,startlet,jumpinc,modulus)
 {dt="";if((et=="")||(startlet=="")||(jumpinc=="")||(modulus=="")){dt="You must supply all values";return dt;}
 startlet=eval(startlet)-1;jumpinc=eval(jumpinc);modulus=eval(modulus);
 if(startlet>modulus){dt="startlet must be <= maxchar";return dt;}
 et=escape(et);
 pos=et.indexOf("%0D");
 while(pos>-1){et=et.substring(0,pos)+et.substring(pos+3,et.length);pos=et.indexOf("%0D");};
 pos=et.indexOf("%0A");
 while(pos>-1){et=et.substring(0,pos)+et.substring(pos+3,et.length);pos=et.indexOf("%0A");};
 et=unescape(et);
 for(i=0;i<(modulus);i++){dt+=et.charAt((startlet+jumpinc*i)%modulus);};
 return dt;};
 
 
 function DoAsciiHex(x,dir)
 {hex="0123456789ABCDEF";almostAscii=' !"#$%&'+"'"+'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ['+'\\'+']^_`abcdefghijklmnopqrstuvwxyz{|}';r="";
 if(dir=="A2H")
 {for(i=0;i<x.length;i++){let=x.charAt(i);pos=almostAscii.indexOf(let)+32;h16=Math.floor(pos/16);h1=pos%16;r+=hex.charAt(h16)+hex.charAt(h1);};};
 if(dir=="H2A")
 {for(i=0;i<x.length;i++){let1=x.charAt(2*i);let2=x.charAt(2*i+1);val=hex.indexOf(let1)*16+hex.indexOf(let2);r+=almostAscii.charAt(val-32);};};
 return r;
 };
 
 
 function DoSubstitute(x,orig,sub,dir)
 {
 x=x.toUpperCase();r="";
 if(dir=="e")
 {for(i=0;i<x.length;i++){let=x.charAt(i);pos=orig.indexOf(let);if(pos>-1){r+=sub.charAt(pos)}else{r+=let}}};
 if(dir=="d")
 {for(i=0;i<x.length;i++){let=x.charAt(i);pos=sub.indexOf(let);if(pos>-1){r+=orig.charAt(pos)}else{r+=let}}};
 return r;
 };
 
 function SwitchEm(x,a,b)
 {
 posA=x.indexOf(a);
 posB=x.indexOf(b);
 r1=x.substring(0,posA)+b+x.substring(posA+1,x.length);
 r2=r1.substring(0,posB)+a+r1.substring(posB+1,r1.length);
 return r2;
 };
 
 
 
 
 
 function MakePlayfairSquare(abc,key1)
 {
 cyabc=MakeCipherABC(abc,key1);
 row = new Array();for(i=0;i<5;i++){row[i]=""};
 for(i=0;i<5;i++){for(j=0;j<5;j++)row[i]+=cyabc.charAt(5*i+j);};
 sqr="";for(i=0;i<5;i++){sqr+=row[i]+"\n"};
 return sqr;
 };
 
 
 function DoPlayfair(et,abc,key1,dir,dup)
 {
 et=et.toUpperCase();abc=abc.toUpperCase();key1=key1.toUpperCase();
 pos=et.indexOf(" ");
 while(pos>-1){et=et.substring(0,pos)+et.substring(pos+1,et.length);pos=et.indexOf(" ");};
 
 pos=et.indexOf("?");
 while(pos>-1){et=et.substring(0,pos)+et.substring(pos+1,et.length);pos=et.indexOf("?");};
 
 for(i=0;i<et.length;i=i+2)
 {let1=et.charAt(i);let2=et.charAt(i+1);if(let1==let2){et=et.substring(0,i+1)+"X"+et.substring(i+1,et.length)};};
 if( (et.length%2)==1 ){et+='X'}
 
 if(dup!=""){
 pos=et.indexOf(dup);
 while(pos>-1){et=et.substring(0,pos)+"I"+et.substring(pos+1,et.length);pos=et.indexOf(dup);};
 };
 
 cyabc=MakeCipherABC(abc,key1)
 row=new Array();for(i=0;i<5;i++){row[i]=""};
 for(i=0;i<5;i++){for(j=0;j<5;j++)row[i]+=cyabc.charAt(5*i+j);};
 
 shf=1;if(dir=="E"){shf=1};if(dir=="D"){shf=4};
 
 dt="";
 for(i=0;i<et.length;i=i+2)
 {
 pos1=cyabc.indexOf(et.charAt(i));pos2=cyabc.indexOf(et.charAt(i+1));
 x1=pos1%5;y1=Math.floor(pos1/5);x2=pos2%5;y2=Math.floor(pos2/5);
 
 if(y1==y2){x1=(x1+shf)%5;x2=(x2+shf)%5}
 else if(x1==x2){y1=(y1+shf)%5;y2=(y2+shf)%5}
 else{temp=x1;x1=x2;x2=temp};
 
 dt+=row[y1].charAt(x1)+row[y2].charAt(x2) ;
 };
 
 
 return dt;
 };
 
 
 </script>
 </head>
 <body>
 <form name="MTMethodForm">
 <table border="1">
 <tr>
 <td colspan="3">
 <center>
 <b><font color="#000000">Modular Transpose Encryption</font></b>
 </center>
 </td>
 </tr>
 <tr>
 <td colspan="3">
 <input type="text" name="MTstart" size="9">Start Character (starting from 1)<br>
 <input type="text" name="MTinc" size="9">Increment<br>
 <input type="text" name="MTmod" size="9">Modulus Factor
 </td>
 </tr>
 <tr>
 <td>
 <textarea rows="19" name="MToriginal" cols="30"></textarea>
 </td>
 <td>
 <textarea rows="19" name="MTencrypted" cols="30"></textarea>
 </td>
 <td>
 <textarea rows="19" name="MTdecrypted" cols="30"></textarea>
 </td>
 </tr>
 <tr>
 <td align="center">
 Type a message up here.<br>
 Original:   <input type="button" value="Encrypt-->" onClick="MTencrypted.value=DoModTranspose(MToriginal.value,MTstart.value,MTinc.value,MTmod.value)">
 </td>
 <td align="center">
 See it get scrambled...<br>
 Encrypted:   <input type="button" value="Decrypt-->" onClick="MTdecrypted.value=DoModTranspose(MTencrypted.value,MTstart.value,MTinc.value,MTmod.value)">
 <br><br>
 Note: You have to put in the<br>
 modular inverse of the encryption values<br>
 to get the correct decryption
 </td>
 <td align="center">
 See it get unscrambled!<br>
 Decrypted:   <input type="reset" value="Reset">
 </td>
 </tr>
 </table>
 </form>
 </body>
 </html>
 
 
 |