DES in JavaScript : DES « Security « JavaScript DHTML

JavaScript DHTML
1. Ajax Layer
2. Data Type
3. Date Time
4. Development
5. Document
6. Event
7. Event onMethod
8. Form Control
9. GUI Components
10. HTML
11. Javascript Collections
12. Javascript Objects
13. Language Basics
14. Node Operation
15. Object Oriented
16. Page Components
17. Security
18. Style Layout
19. Table
20. Utilities
21. Window Browser
Microsoft Office Word 2007 Tutorial
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
JavaScript DHTML » Security » DES 
DES in JavaScript

<html>
  <head>
    <!--
      CryptoMX Tools
      Copyright (C2004 3005 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 optionany 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>DES Crypt</title>
    <!-- des.js -->
    
    <script language="Javascript">
function dP(){
  salt=document.CRYPT.Salt.value;
  pw_salt=this.crypt(salt,document.CRYPT.PW.value)

  document.CRYPT.ENC_PW.value=pw_salt[0];
  document.CRYPT.Salt.value=pw_salt[1];
  return false;
}

function bTU(b){
      value=Math.floor(b);
      return (value>=0?value:value+256);
}
function fBTI(b,offset){
      value=this.byteToUnsigned(b[offset++]);
      value|=(this.byteToUnsigned(b[offset++])<<8);
      value|=(this.byteToUnsigned(b[offset++])<<16);
      value|=(this.byteToUnsigned(b[offset++])<<24);
      return value;
}
function iTFB(iValue,b,offset){
      b[offset++]=((iValue)&0xff);
      b[offset++]=((iValue>>>8)&0xff);
      b[offset++]=((iValue>>>16)&0xff);
      b[offset++]=((iValue>>>24)&0xff);
}
function P_P(a,b,n,m,results){
      t=((a>>>n)^b)&m;
      a^=t<<n;
      b^=t;
      results[0]=a;
      results[1]=b;
}
function H_P(a,n,m){
      t=((a<<(16-n))^a)&m;
      a=a^t^(t>>>(16-n));
      return a;
}
function d_s_k(key){
      schedule=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
      c=this.fourBytesToInt(key,0);
      d=this.fourBytesToInt(key,4);
      results=new Array(0,0);
      this.PERM_OP(d,c,4,0x0f0f0f0f,results);
      d=results[0];c=results[1];
      c=this.HPERM_OP(c,-2,0xcccc0000);
      d=this.HPERM_OP(d,-2,0xcccc0000);
      this.PERM_OP(d,c,1,0x55555555,results);
      d=results[0];c=results[1];
      this.PERM_OP(c,d,8,0x00ff00ff,results);
      c=results[0];d=results[1];
      this.PERM_OP(d,c,1,0x55555555,results);
      d=results[0];c=results[1];
      d=(((d&0x000000ff)<<16)|(d&0x0000ff00)|((d&0x00ff0000)>>>16)|((c&0xf0000000)>>>4));
      c&=0x0fffffff;
      s=0;t=0;
      j=0;
      for(i=0;i<this.ITERATIONS;i++){
         if(this.shifts2[i]){
            c=(c>>>2)|(c<<26);
            d=(d>>>2)|(d<<26);
         }else{
            c=(c>>>1)|(c<<27);
            d=(d>>>1)|(d<<27);
         }
         c&=0x0fffffff;
         d&=0x0fffffff;
         s=this.skb[0][c&0x3f]|this.skb[1][((c>>>6)&0x03)|((c>>>7)&0x3c)]|this.skb[2][((c>>>13)&0x0f)|((c>>>14)&0x30)]|this.skb[3][((c>>>20)&0x01)|((c>>>21)&0x06)|((c>>>22)&0x38)];
         t=this.skb[4][d&0x3f]|this.skb[5][((d>>>7)&0x03)|((d>>>8)&0x3c)]|this.skb[6][(d>>>15)&0x3f]|this.skb[7][((d>>>21)&0x0f)|((d>>>22)&0x30)];
         schedule[j++]=((t<< 16)|(s&0x0000ffff))&0xffffffff;
         s=((s>>>16)|(t&0xffff0000));
         s=(s<<4)|(s>>>28);
         schedule[j++]=s&0xffffffff;
      }
      return schedule;
}
function D_E(L,R,S,E0,E1,s){
      v=R^(R>>>16);
      u=v&E0;
      v=v&E1;
      u=(u^(u<<16))^R^s[S];
      t=(v^(v<<16))^R^s[S+1];
      t=(t>>>4)|(t<<28);
      L^=this.SPtrans[1][t&0x3f]|this.SPtrans[3][(t>>>8)&0x3f]|this.SPtrans[5][(t>>>16)&0x3f]|this.SPtrans[7][(t>>>24)&0x3f]|this.SPtrans[0][u&0x3f]|this.SPtrans[2][(u>>>8)&0x3f]|this.SPtrans[4][(u>>>16)&0x3f]|this.SPtrans[6][(u>>>24)&0x3f];
      return L;
}
function bdy(schedule,Eswap0,Eswap1) {
  left=0;
  right=0;
  t=0;
      for(j=0;j<25;j++){
         for(i=0;i<this.ITERATIONS*2;i+=4){
            left=this.D_ENCRYPT(left, right,i,Eswap0,Eswap1,schedule);
            right=this.D_ENCRYPT(right,left,i+2,Eswap0,Eswap1,schedule);
         }
         t=left; 
         left=right; 
         right=t;
      }
      t=right;
      right=(left>>>1)|(left<<31);
      left=(t>>>1)|(t<<31);
      left&=0xffffffff;
      right&=0xffffffff;
      results=new Array(0,0);
      this.PERM_OP(right,left,1,0x55555555,results)
      right=results[0];left=results[1];
      this.PERM_OP(left,right,8,0x00ff00ff,results)
      left=results[0];right=results[1];
      this.PERM_OP(right,left,2,0x33333333,results)
      right=results[0];left=results[1];
      this.PERM_OP(left,right,16,0x0000ffff,results);
      left=results[0];right=results[1];
      this.PERM_OP(right,left,4,0x0f0f0f0f,results);
      right=results[0];left=results[1];
      out=new Array(0,0);
      out[0]=left;out[1]=right;
      return out;
}
function rC(){ return this.GOODCHARS[Math.floor(64*Math.random())]}
function cript(salt,original){
  if(salt.length>=2salt=salt.substring(0,2);
  while(salt.length<2salt+=this.randChar();
  re=new RegExp("[^./a-zA-Z0-9]","g");
  if(re.test(salt)) salt=this.randChar()+this.randChar();
  charZero=salt.charAt(0)+'';
      charOne=salt.charAt(1)+'';
  ccZ=charZero.charCodeAt(0);
  ccO=charOne.charCodeAt(0);
  buffer=charZero+charOne+"           ";
      Eswap0=this.con_salt[ccZ];
      Eswap1=this.con_salt[ccO]<<4;
      key=new Array(0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0);
      for(i=0;i<key.length&&i<original.length;i++){
         iChar=original.charCodeAt(i);
         key[i]=iChar<<1;
      }
      schedule=this.des_set_key(key);
      out=this.body(schedule,Eswap0,Eswap1);
      b=new Array(0,0,0,0,0,0,0,0,0);
      this.intToFourBytes(out[0],b,0);
      this.intToFourBytes(out[1],b,4);
      b[8]=0;
      for(i=2,y=0,u=0x80;i<13;i++){
         for(j=0,c=0;j<6;j++){
            c<<=1;
            if((b[y]&u)!=0c|=1;
            u>>>=1;
            if(u==0){
               y++;
               u=0x80;
            }
            buffer=buffer.substring(0,i)+String.fromCharCode(this.cov_2char[c])+buffer.substring(i+1,buffer.length);
         }
      }
  ret=new Array(buffer,salt);
      return ret;
}

function Crypt() {
this.ITERATIONS=16;
this.GOODCHARS=new Array(
  ".","/","0","1","2","3","4","5","6","7",
  "8","9","A","B","C","D","E","F","G","H",
  "I","J","K","L","M","N","O","P","Q","R",
  "S","T","U","V","W","X","Y","Z","a","b",
  "c","d","e","f","g","h","i","j","k","l",
  "m","n","o","p","q","r","s","t","u","v",
  "w","x","y","z");
this.con_salt=new Array(
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01
      0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09
      0x0A,0x0B,0x05,0x06,0x07,0x08,0x09,0x0A
      0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12
      0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A
      0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22
      0x23,0x24,0x25,0x20,0x21,0x22,0x23,0x24
      0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C
      0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34
      0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C
      0x3D,0x3E,0x3F,0x00,0x00,0x00,0x00,0x00 );
this.shifts2=new Array(
  false,false,true,true,true,true,true,true,
  false,true, true,true,true,true,true,false );
this.skb=new Array(0,0,0,0,0,0,0,0);
  this.skb[0]=new Array(
         0x00000000,0x00000010,0x20000000,0x20000010
         0x00010000,0x00010010,0x20010000,0x20010010
         0x00000800,0x00000810,0x20000800,0x20000810
         0x00010800,0x00010810,0x20010800,0x20010810
         0x00000020,0x00000030,0x20000020,0x20000030
         0x00010020,0x00010030,0x20010020,0x20010030
         0x00000820,0x00000830,0x20000820,0x20000830
         0x00010820,0x00010830,0x20010820,0x20010830
         0x00080000,0x00080010,0x20080000,0x20080010
         0x00090000,0x00090010,0x20090000,0x20090010
         0x00080800,0x00080810,0x20080800,0x20080810
         0x00090800,0x00090810,0x20090800,0x20090810
         0x00080020,0x00080030,0x20080020,0x20080030
         0x00090020,0x00090030,0x20090020,0x20090030
         0x00080820,0x00080830,0x20080820,0x20080830
         0x00090820,0x00090830,0x20090820,0x20090830 );
  this.skb[1]=new Array(
         0x00000000,0x02000000,0x00002000,0x02002000
         0x00200000,0x02200000,0x00202000,0x02202000
         0x00000004,0x02000004,0x00002004,0x02002004
         0x00200004,0x02200004,0x00202004,0x02202004
         0x00000400,0x02000400,0x00002400,0x02002400
         0x00200400,0x02200400,0x00202400,0x02202400
         0x00000404,0x02000404,0x00002404,0x02002404
         0x00200404,0x02200404,0x00202404,0x02202404
         0x10000000,0x12000000,0x10002000,0x12002000
         0x10200000,0x12200000,0x10202000,0x12202000
         0x10000004,0x12000004,0x10002004,0x12002004
         0x10200004,0x12200004,0x10202004,0x12202004
         0x10000400,0x12000400,0x10002400,0x12002400
         0x10200400,0x12200400,0x10202400,0x12202400
         0x10000404,0x12000404,0x10002404,0x12002404
         0x10200404,0x12200404,0x10202404,0x12202404 );
  this.skb[2]=new Array(
         0x00000000,0x00000001,0x00040000,0x00040001
         0x01000000,0x01000001,0x01040000,0x01040001
         0x00000002,0x00000003,0x00040002,0x00040003
         0x01000002,0x01000003,0x01040002,0x01040003
         0x00000200,0x00000201,0x00040200,0x00040201
         0x01000200,0x01000201,0x01040200,0x01040201
         0x00000202,0x00000203,0x00040202,0x00040203
         0x01000202,0x01000203,0x01040202,0x01040203
         0x08000000,0x08000001,0x08040000,0x08040001
         0x09000000,0x09000001,0x09040000,0x09040001
         0x08000002,0x08000003,0x08040002,0x08040003
         0x09000002,0x09000003,0x09040002,0x09040003
         0x08000200,0x08000201,0x08040200,0x08040201
         0x09000200,0x09000201,0x09040200,0x09040201
         0x08000202,0x08000203,0x08040202,0x08040203
         0x09000202,0x09000203,0x09040202,0x09040203 );
  this.skb[3]=new Array(
         0x00000000,0x00100000,0x00000100,0x00100100
         0x00000008,0x00100008,0x00000108,0x00100108
         0x00001000,0x00101000,0x00001100,0x00101100
         0x00001008,0x00101008,0x00001108,0x00101108
         0x04000000,0x04100000,0x04000100,0x04100100
         0x04000008,0x04100008,0x04000108,0x04100108
         0x04001000,0x04101000,0x04001100,0x04101100
         0x04001008,0x04101008,0x04001108,0x04101108
         0x00020000,0x00120000,0x00020100,0x00120100
         0x00020008,0x00120008,0x00020108,0x00120108
         0x00021000,0x00121000,0x00021100,0x00121100
         0x00021008,0x00121008,0x00021108,0x00121108
         0x04020000,0x04120000,0x04020100,0x04120100
         0x04020008,0x04120008,0x04020108,0x04120108
         0x04021000,0x04121000,0x04021100,0x04121100
         0x04021008,0x04121008,0x04021108,0x04121108 );
  this.skb[4]=new Array(
         0x00000000,0x10000000,0x00010000,0x10010000
         0x00000004,0x10000004,0x00010004,0x10010004
         0x20000000,0x30000000,0x20010000,0x30010000
         0x20000004,0x30000004,0x20010004,0x30010004
         0x00100000,0x10100000,0x00110000,0x10110000
         0x00100004,0x10100004,0x00110004,0x10110004
         0x20100000,0x30100000,0x20110000,0x30110000
         0x20100004,0x30100004,0x20110004,0x30110004
         0x00001000,0x10001000,0x00011000,0x10011000
         0x00001004,0x10001004,0x00011004,0x10011004
         0x20001000,0x30001000,0x20011000,0x30011000
         0x20001004,0x30001004,0x20011004,0x30011004
         0x00101000,0x10101000,0x00111000,0x10111000
         0x00101004,0x10101004,0x00111004,0x10111004
         0x20101000,0x30101000,0x20111000,0x30111000
         0x20101004,0x30101004,0x20111004,0x30111004 );
  this.skb[5]=new Array(
         0x00000000,0x08000000,0x00000008,0x08000008
         0x00000400,0x08000400,0x00000408,0x08000408
         0x00020000,0x08020000,0x00020008,0x08020008
         0x00020400,0x08020400,0x00020408,0x08020408
         0x00000001,0x08000001,0x00000009,0x08000009
         0x00000401,0x08000401,0x00000409,0x08000409
         0x00020001,0x08020001,0x00020009,0x08020009
         0x00020401,0x08020401,0x00020409,0x08020409
         0x02000000,0x0A000000,0x02000008,0x0A000008
         0x02000400,0x0A000400,0x02000408,0x0A000408
         0x02020000,0x0A020000,0x02020008,0x0A020008
         0x02020400,0x0A020400,0x02020408,0x0A020408
         0x02000001,0x0A000001,0x02000009,0x0A000009
         0x02000401,0x0A000401,0x02000409,0x0A000409
         0x02020001,0x0A020001,0x02020009,0x0A020009
         0x02020401,0x0A020401,0x02020409,0x0A020409 );
  this.skb[6]=new Array(
         0x00000000,0x00000100,0x00080000,0x00080100
         0x01000000,0x01000100,0x01080000,0x01080100
         0x00000010,0x00000110,0x00080010,0x00080110
         0x01000010,0x01000110,0x01080010,0x01080110
         0x00200000,0x00200100,0x00280000,0x00280100
         0x01200000,0x01200100,0x01280000,0x01280100
         0x00200010,0x00200110,0x00280010,0x00280110
         0x01200010,0x01200110,0x01280010,0x01280110
         0x00000200,0x00000300,0x00080200,0x00080300
         0x01000200,0x01000300,0x01080200,0x01080300
         0x00000210,0x00000310,0x00080210,0x00080310