Results 1 to 5 of 5

Thread: help change javascript to c/c++ or java?

  1. #1
    Join Date
    Jan 2007
    Location
    heaven , Malaysia
    Beans
    806

    help change javascript to c/c++ or java?

    HTML Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <title>Network Security Assignment</title>
      <script language="JavaScript">
    // accumulate values to put into text area
    var accumulated_output_info;
    
    // add a labeled value to the text area
    function accumulate_output( str )
    {
       accumulated_output_info = accumulated_output_info + str + "\n";
    }
    
    // add a bit string to the output, inserting spaces as designated
    function accumulate_bitstring( label, ary, spacing )
    {
       var i;
    
       accumulated_output_info += label;
    
       // add bits
       for( i=1; i<ary.length; i++ )
       {
          if ( (i%spacing) == 1 )
             accumulated_output_info += " ";	// time to add a space
          accumulated_output_info += ary[i];	// and the bit
       }
    
       // insert trailing end-of-line
       accumulated_output_info += "\n";
    }
    
    // special value stored in x[0] to indicate a problem
    var ERROR_VAL = -9876;
    
    // initial permutation (split into left/right halves )
    // since DES numbers bits starting at 1, we will ignore x[0]
    var IP_perm = new Array( -1,
    	58, 50, 42, 34, 26, 18, 10, 2,
    	60, 52, 44, 36, 28, 20, 12, 4,
    	62, 54, 46, 38, 30, 22, 14, 6,
    	64, 56, 48, 40, 32, 24, 16, 8,
    	57, 49, 41, 33, 25, 17, 9, 1,
    	59, 51, 43, 35, 27, 19, 11, 3,
    	61, 53, 45, 37, 29, 21, 13, 5,
    	63, 55, 47, 39, 31, 23, 15, 7 );
    
    // final permutation (inverse initial permutation)
    var FP_perm = new Array( -1,
    	40, 8, 48, 16, 56, 24, 64, 32,
    	39, 7, 47, 15, 55, 23, 63, 31,
    	38, 6, 46, 14, 54, 22, 62, 30,
    	37, 5, 45, 13, 53, 21, 61, 29,
    	36, 4, 44, 12, 52, 20, 60, 28,
    	35, 3, 43, 11, 51, 19, 59, 27,
    	34, 2, 42, 10, 50, 18, 58, 26,
    	33, 1, 41, 9, 49, 17, 57, 25 );
    
    // per-round expansion
    var E_perm = new Array( -1,
    	32, 1, 2, 3, 4, 5,
    	4, 5, 6, 7, 8, 9,
    	8, 9, 10, 11, 12, 13,
    	12, 13, 14, 15, 16, 17,
    	16, 17, 18, 19, 20, 21,
    	20, 21, 22, 23, 24, 25,
    	24, 25, 26, 27, 28, 29,
    	28, 29, 30, 31, 32, 1 );
    
    // per-round permutation
    var P_perm = new Array( -1,
    	16, 7, 20, 21, 29, 12, 28, 17,
    	1, 15, 23, 26, 5, 18, 31, 10,
    	2, 8, 24, 14, 32, 27, 3, 9,
    	19, 13, 30, 6, 22, 11, 4, 25 );
    
    // note we do use element 0 in the S-Boxes
    var S1 = new Array(
    	14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
    	0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
    	4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
    	15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 );
    var S2 = new Array(
    	15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
    	3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
    	0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
    	13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 );
    var S3 = new Array(
    	10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
    	13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
    	13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
    	1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 );
    var S4 = new Array(
    	7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
    	13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
    	10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
    	3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 );
    var S5 = new Array(
    	2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
    	14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
    	4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
    	11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 );
    var S6 = new Array(
    	12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
    	10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
    	9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
    	4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 );
    var S7 = new Array(
    	4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
    	13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
    	1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
    	6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 );
    var S8 = new Array(
    	13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
    	1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
    	7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
    	2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 );
    
    //, first, key, permutation
    var PC_1_perm = new Array( -1, 
    	// C subkey bits
    	57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
    	10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
    	// D subkey bits
    	63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
    	14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 );
    
    //, per-round, key, selection, permutation
    var PC_2_perm = new Array( -1, 
    	14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
    	23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
    	41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
    	44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 );
    
    // save output in case we want to reformat it later
    var DES_output = new Array( 65 );
    
    // remove spaces from input
    function remove_spaces( instr )
    {
       var i;
       var outstr="";
    
       for( i=0; i<instr.length; i++ )
          if ( instr.charAt(i) != " " )
             // not a space, include it
             outstr += instr.charAt(i);
    
       return outstr;
    }
    
    // split an integer into bits
    // ary   = array to store bits in
    // start = starting subscript
    // bitc  = number of bits to convert
    // val   = number to convert
    function split_int( ary, start, bitc, val )
    {
       var i = start;
       var j;
       for( j=bitc-1; j>=0; j-- )
       {
          // isolate low-order bit
          ary[i+j] = val & 1;
          // remove that bit
          val >>= 1;
       }
    }
    
    // get the message to encrypt/decrypt
    function get_value( bitarray, str, isASCII )
    {
       var i;
       var val;	// one hex digit
    
       // insert note we probably are ok
       bitarray[0] = -1;
    
       if ( isASCII )
       {
          // check length of data
          if ( str.length != 8 )
          {
             window.alert("Message and key must be 64 bits (8 ASCII characters)");
             bitarray[0] = ERROR_VAL;
             return
          }
    
          // have ASCII data
          for( i=0; i<8; i++ )
          {
             split_int( bitarray, i*8+1, 8, str.charCodeAt(i) );
          }
       }
       else
       {
          // have hex data - remove any spaces they used, then convert
          str = remove_spaces(str);
    
          // check length of data
          if ( str.length != 16 )
          {
             window.alert("Message and key must be 64 bits (16 hex digits)");
             bitarray[0] = ERROR_VAL;
             return;
          }
    
          for( i=0; i<16; i++ )
          {
             // get the next hex digit
             val = str.charCodeAt(i);
    
             // do some error checking
             if ( val >= 48 && val <= 57 )
                // have a valid digit 0-9
                val -= 48;
             else if ( val >= 65 && val <= 70 )
                // have a valid digit A-F
                val -= 55;
             else if ( val >= 97 && val <= 102 )
                // have a valid digit A-F
                val -= 87;
             else
             {
                // not 0-9 or A-F, complain
                window.alert( str.charAt(i)+" is not a valid hex digit" );
                bitarray[0] = ERROR_VAL;
                return;
             }
    
             // add this digit to the array
             split_int( bitarray, i*4+1, 4, val-48 );
          }
       }
    }
    
    // format the output in the desired form
    // if -1, use existing value
    // -- uses the global array DES_output
    function format_DES_output( )
    {
       var i;
       var bits;
       var str="";
    
       // what type of data do we have to work with?
       if ( document.stuff.outtype[0].checked )
       {
          // convert each set of bits back to ASCII
          for( i=1; i<=64; i+= 8 )
          {
                str += String.fromCharCode(
                            DES_output[i  ]*128 + DES_output[i+1]*64  +
                            DES_output[i+2]*32  + DES_output[i+3]*16  +
                            DES_output[i+4]*8   + DES_output[i+5]*4   +
                            DES_output[i+6]*2   + DES_output[i+7] );
          }
       }
       else 
       {
          // output hexdecimal data
          for( i=1; i<=64; i+= 4 )
          {
                bits = DES_output[i  ]*8   + DES_output[i+1]*4   +
                       DES_output[i+2]*2   + DES_output[i+3];
    
                // 0-9 or A-F?
                if ( bits <= 9 )
                   str += String.fromCharCode( bits+48 );
                else
                   str += String.fromCharCode( bits+87 );
          }
       }
    
       // copy to textbox
       document.stuff.outdata.value = str;
    }
    
    // copy bits in a permutation
    //   dest = where to copy the bits to
    //   src  = Where to copy the bits from
    //   perm = The order to copy/permute the bits
    // note: since DES ingores x[0], we do also
    function permute( dest, src, perm )
    {
      var i;
      var fromloc;
    
      for( i=1; i<perm.length; i++ )
      {
        fromloc = perm[i];
        dest[i] = src[fromloc];
      }
    }
    
    // do an array XOR
    // assume all array entries are 0 or 1
    function xor( a1, a2 )
    {
       var i;
    
       for( i=1; i<a1.length; i++ )
          a1[i] = a1[i] ^ a2[i];
    }
    
    // process one S-Box, return integer from S-Box
    function do_S( SBox, index, inbits )
    {
       // collect the 6 bits into a single integer
       var S_index = inbits[index  ]*32 + inbits[index+5]*16 +
                     inbits[index+1]*8  + inbits[index+2]*4 +
                     inbits[index+3]*2  + inbits[index+4];
    
       // do lookup
       return SBox[S_index];
    }
    
    // do one round of DES encryption
    function des_round( L, R, KeyR )
    {
       var E_result = new Array( 49 );
       var S_out = new Array( 33 );
    
       // copy the existing L bits, then set new L = old R
       var temp_L = new Array( 33 );
       for( i=0; i<33; i++ )
       {
          // copy exising L bits
          temp_L[i] = L[i];
    
          // set L = R
          L[i] = R[i];
       }
    
       // expand R using E permutation
       permute( E_result, R, E_perm );
       accumulate_bitstring( "E   : ", E_result, 6 );
       accumulate_bitstring( "KS  : ", KeyR, 6 );
    
       // exclusive-or with current key
       xor( E_result, KeyR );
       accumulate_bitstring( "E xor KS: ", E_result, 6 );
    
       // put through the S-Boxes
       split_int( S_out,  1, 4, do_S( S1,  1, E_result ) );
       split_int( S_out,  5, 4, do_S( S2,  7, E_result ) );
       split_int( S_out,  9, 4, do_S( S3, 13, E_result ) );
       split_int( S_out, 13, 4, do_S( S4, 19, E_result ) );
       split_int( S_out, 17, 4, do_S( S5, 25, E_result ) );
       split_int( S_out, 21, 4, do_S( S6, 31, E_result ) );
       split_int( S_out, 25, 4, do_S( S7, 37, E_result ) );
       split_int( S_out, 29, 4, do_S( S8, 43, E_result ) );
       accumulate_bitstring( "Sbox: ", S_out, 4 );
    
       // do the P permutation
       permute( R, S_out, P_perm );
       accumulate_bitstring( "P   :", R, 8 );
    
       // xor this with old L to get the new R
       xor( R, temp_L );
       accumulate_bitstring( "L[i]:", L, 8 );
       accumulate_bitstring( "R[i]:", R, 8 );
    }
    
    // shift the CD values left 1 bit
    function shift_CD_1( CD )
    {
       var i;
    
       // note we use [0] to hold the bit shifted around the end
       for( i=0; i<=55; i++ )
          CD[i] = CD[i+1];
    
       // shift D bit around end
       CD[56] = CD[28];
       // shift C bit around end
       CD[28] = CD[0];
    }
    
    // shift the CD values left 2 bits
    function shift_CD_2( CD )
    {
       var i;
       var C1 = CD[1];
    
       // note we use [0] to hold the bit shifted around the end
       for( i=0; i<=54; i++ )
          CD[i] = CD[i+2];
    
       // shift D bits around end
       CD[55] = CD[27];
       CD[56] = CD[28];
       // shift C bits around end
       CD[27] = C1;
       CD[28] = CD[0];
    }
    
    
    // do the actual DES encryption/decryption
    function des_encrypt( inData, Key, do_encrypt )
    {
       var tempData = new Array( 65 );	// output bits
       var CD = new Array( 57 );		// halves of current key
       var KS = new Array( 16 );		// per-round key schedules
       var L = new Array( 33 );		// left half of current data
       var R = new Array( 33 );		// right half of current data
       var result = new Array( 65 );	// DES output
       var i;
    
       // do the initial key permutation
       permute( CD, Key, PC_1_perm );
       accumulate_bitstring( "CD[0]: ", CD, 7 );
    
       // create the subkeys
       for( i=1; i<=16; i++ )
       {
          // create a new array for each round
          KS[i] = new Array( 49 );
    
          // how much should we shift C and D?
          if ( i==1 || i==2 || i==9 || i == 16 )
             shift_CD_1( CD );
          else
             shift_CD_2( CD );
          accumulate_bitstring( "CD["+i+"]: ", CD, 7 );
    
          // create the actual subkey
          permute( KS[i], CD, PC_2_perm );
          accumulate_bitstring( "KS["+i+"]: ", KS[i], 6 );
       }
    
       // handle the initial permutation
       permute( tempData, inData, IP_perm );
    
       // split data into L/R parts
       for( i=1; i<=32; i++ )
       {
          L[i] = tempData[i];
          R[i] = tempData[i+32];
       }
       accumulate_bitstring( "L[0]: ", L, 8 );
       accumulate_bitstring( "R[0]: ", R, 8 );
    
       // encrypting or decrypting?
       if ( do_encrypt )
       {
          // encrypting
          for( i=1; i<=16; i++ )
          {
             accumulate_output( "Round " + i );
             des_round( L, R, KS[i] );
          }
       }
       else
       {
          // decrypting
          for( i=16; i>=1; i-- )
          {
             accumulate_output( "Round " + (17-i) );
             des_round( L, R, KS[i] );
          }
       }
    
       // create the 64-bit preoutput block = R16/L16
       for( i=1; i<=32; i++ )
       {
          // copy R bits into left half of block, L bits into right half
          tempData[i] = R[i];
          tempData[i+32] = L[i];
       }
       accumulate_bitstring ("LR[16] ", tempData, 8 );
    
       // do final permutation and return result
       permute( result, tempData, FP_perm );
       return result;
    }
    // do encrytion/decryption
    // do_encrypt is TRUE for encrypt, FALSE for decrypt
    function do_des( do_encrypt )
    {
       var inData = new Array( 65 );	// input message bits
       var Key = new Array( 65 );
    
       accumulated_output_info = "";
    
       // get the message from the user
       // also check if it is ASCII or hex
       get_value( inData, document.stuff.indata.value,
    		document.stuff.intype[0].checked );
    
       // problems??
       if ( inData[0] == ERROR_VAL )
       {
          document.stuff.details.value = accumulated_output_info;
          return;
       }
       accumulate_bitstring( "Input bits:", inData, 8 );
    
       // get the key from the user
       get_value( Key, document.stuff.key.value, false );
       // problems??
       if ( Key[0] == ERROR_VAL )
       {
          document.stuff.details.value = accumulated_output_info;
          return;
       }
       accumulate_bitstring( "Key bits:", Key, 8 );
    
       // do the encryption/decryption, put output in DES_output for display
       DES_output = des_encrypt( inData, Key, do_encrypt )
    
       accumulate_bitstring ("Output ", DES_output, 8 );
    
       // process output
       format_DES_output( );
       document.stuff.details.value = accumulated_output_info;
    }
    
    // do Triple-DES encrytion/decryption
    // do_encrypt is TRUE for encrypt, FALSE for decrypt
    function do_tdes( do_encrypt )
    {
       var inData = new Array( 65 );	// input message bits
       var tempdata = new Array( 65 );	// interm result bits
       var KeyA = new Array( 65 );
       var KeyB = new Array( 65 );
    
       accumulated_output_info = "";
    
       // get the message from the user
       // also check if it is ASCII or hex
       get_value( inData, document.stuff.indata.value,
    		document.stuff.intype[0].checked );
    
       // problems??
       if ( inData[0] == ERROR_VAL )
       {
          document.stuff.details.value = accumulated_output_info;
          return;
       }
       accumulate_bitstring( "Input bits:", inData, 8 );
    
       // get the key part A from the user
       get_value( KeyA, document.stuff.key.value, false );
       // problems??
       if ( KeyA[0] == ERROR_VAL )
       {
          document.stuff.details.value = accumulated_output_info;
          return;
       }
       accumulate_bitstring( "Key A bits:", KeyA, 8 );
    
    
       // get the key part B from the user
       get_value( KeyB, document.stuff.keyb.value, false );
       // problems??
       if ( KeyB[0] == ERROR_VAL )
       {
          document.stuff.details.value = accumulated_output_info;
          return;
       }
       accumulate_bitstring( "Key B bits:", KeyB, 8 );
    
       if ( do_encrypt )
       {
          // TDES encrypt = DES encrypt/decrypt/encrypt
          accumulate_output("---- Starting first encryption ----");
          tempdata = des_encrypt( inData, KeyA, true );
          accumulate_output("---- Starting second decryption ----");
          tempdata = des_encrypt( tempdata, KeyB, false );
          accumulate_output("---- Starting third encryption ----");
          DES_output = des_encrypt( tempdata, KeyA, true );
       }
       else
       {
          // TDES decrypt = DES decrypt/encrypt/decrypt
          accumulate_output("---- Starting first decryption ----");
          tempdata = des_encrypt( inData, KeyA, false );
          accumulate_output("---- Starting second encryption ----");
          tempdata = des_encrypt( tempdata, KeyB, true );
          accumulate_output("---- Starting third decryption ----");
          DES_output = des_encrypt( tempdata, KeyA, false );
       }
    
       accumulate_bitstring ("Output ", DES_output, 8 );
    
       // process output
       format_DES_output( );
       document.stuff.details.value = accumulated_output_info;
    }
      </script>
    </head>
    <body>
    
    <h2 align="center">D.E.S ENCRYPTION</h2>
    <form name="stuff">
      <table align="center" valign="center">
        <tbody>
          <tr>
            <td valign="top">Cipher/Plaintext</td>
            <td><input type="text" name="indata" size="25"><br>
    
            <input type="radio" name="intype">ASCII</input>
            <input type="radio" name="intype" checked="checked">Hexadecimal</input> </td>
          </tr>
          <tr>
            <td>DES Key</td>
            <td><input type="text" name="key" value=""  size="25"></td>
          </tr>
    
          <tr>
          </tr>
          <tr>
            <td colspan="2" align="center">
                <input type="button" value="DES Encrypt" onclick="do_des(true);">
                <input type="button" value="DES Decrypt" onclick="do_des(false);"><br>
    
          </tr>
          <tr>
            <td valign="top">Cipher/Plaintext</td>
            <td><input type="text" name="outdata" size="25"><br>
            <input type="radio" name="outtype" onclick="format_DES_output();">ASCII</input>
    
            <input type="radio" name="outtype" checked="checked" onclick="format_DES_output();">
    		Hexadecimal</input>
            </td>
          </tr>
          <tr ><td colspan="2">
          		Process:<br>
    		<textarea name="details" id="details" rows="20" cols="80"></textarea></form>
    
          </td></tr>
        </tbody>
      </table>
    
    
    
    </body>
    </html>
    any help would be appreciated
    もう誰かのためじゃなくて 自分のために笑っていいよ
    ~ Please do mark as resolved thread if your problem is solved,thanks~

  2. #2
    Join Date
    Mar 2009
    Beans
    8

    Re: help change javascript to c/c++ or java?

    Why do you needed it changed?

  3. #3
    Join Date
    Nov 2006
    Location
    Philadelphia, PA
    Beans
    Hidden!

    Re: help change javascript to c/c++ or java?

    Java has libraries for DES ciphers. Manually implementing your own crypto, unless you're an expert, is generally insecure. (DES is nothing to talk about when it comes to real security anyway).

    http://java.sun.com/javase/6/docs/te...ryptoSpec.html
    ThinkPad R61 14" | Fedora 14 | Core 2 Duo 2.0Ghz | 4GB DDR2 | 64GB SSD

  4. #4
    Join Date
    Jan 2007
    Location
    heaven , Malaysia
    Beans
    806

    Re: help change javascript to c/c++ or java?

    i need to understand the sequence for my test ....i'm still blur...
    もう誰かのためじゃなくて 自分のために笑っていいよ
    ~ Please do mark as resolved thread if your problem is solved,thanks~

  5. #5
    Join Date
    Jan 2007
    Location
    heaven , Malaysia
    Beans
    806

    Re: help change javascript to c/c++ or java?

    i found this --> http://www.herongyang.com/crypto/des...mentation.html

    anybody found GUI version?
    もう誰かのためじゃなくて 自分のために笑っていいよ
    ~ Please do mark as resolved thread if your problem is solved,thanks~

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •