PDA

View Full Version : help change javascript to c/c++ or java?



AlexenderReez
March 9th, 2009, 02:48 PM
<!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

μ .
March 9th, 2009, 10:07 PM
Why do you needed it changed?

kavon89
March 9th, 2009, 10:28 PM
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/technotes/guides/security/crypto/CryptoSpec.html

AlexenderReez
March 9th, 2009, 11:00 PM
i need to understand the sequence for my test ....i'm still blur...

AlexenderReez
March 9th, 2009, 11:11 PM
i found this --> http://www.herongyang.com/crypto/des_java_jce_sun_implementation.html

anybody found GUI version?