复制代码代码如下:
// Paul Tero, Juli 2001
//http://www.tero.co.uk/des/
//
// Dioptimalkan untuk kinerja dengan blok besar oleh Michael Hayworth, November 2001
//http://www.netdealing.com
//
// Perangkat lunak ini disediakan "sebagaimana adanya" dan
// Setiap jaminan tersurat maupun tersirat, termasuk, tetapi tidak terbatas pada,
// jaminan tersirat untuk diperjualbelikan dan kebugaran untuk tujuan tertentu
// ditolak. Dalam hal apa pun penulis atau kontributor tidak akan bertanggung jawab
// Untuk setiap langsung, tidak langsung, insidental, khusus, teladan, atau konsekuensial
// kerusakan (termasuk, tetapi tidak terbatas pada, pengadaan barang pengganti
// atau layanan; Hilangnya penggunaan, data, atau keuntungan; Atau gangguan bisnis)
// Namun menyebabkan dan pada teori kewajiban apa pun, baik dalam kontrak, ketat
// kewajiban, atau gugatan (termasuk kelalaian atau sebaliknya) yang timbul dengan cara apa pun
// Dari penggunaan perangkat lunak ini, bahkan jika disarankan tentang kemungkinan
// kerusakan seperti itu.
// des
// Ini mengambil kunci, pesan, dan apakah akan mengenkripsi atau mendekripsi
fungsi des (tombol, pesan, enkripsi, mode, iv, padding) {
// mendeklarasikan ini secara lokal mempercepat segalanya
var spfunction1 = array baru (0x1010400,0x10000.0x10404.0x1010004.0x10404.0x4.0x10000.0x400.0x10400.04.0004.00000400.0x400.04040404040404040400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400 x1000400.0x10400.0x10400.0x1010000, 0x1010000.0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x100000000.0x10000.01040000000000000000000000000001000000000000.010400.00000000000000000000000.00000.0000000.0000000.0000000.0000000.00000.0000000 10000,0x10400,0x1000004,0x400,0x4,0x1000404, 0x10404.0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400400400400,0x10004,0404,0400400400400400,0404,0400400400400400400400400400400400400400400400400400400400400
var spfunction2 = array baru (-0x7fef7fe0, -0x7fff8000,0x8000,0x108020,0x100000,0x20, -0x7fefffe0, -0x7ff7fe0, -0x7ffffe0, -0x7feffe0, -0x7FFFFFE0, -0x7fefe0, -0x7FFFFE0, -0x7fe0, -04000, -0000, -0000, -0000, -0000, -0000, -0000, -0000, -0000. 00000,0x20, -0x7fefffe0,0x108000, 0x100020, -0x7ffff7fe0,0, -0x80000000,0x8000,0x108020, -0x7ff00000,0x100020, -0x7fffffe0,0x108000.0x8020, -0x7fef8000, -0x7ff00.000,01020202, 000, -0x7fff7fe0, -0x7ff00000 , -0x7fef8000,0x8000, -0x7ff00000, -0x7fff8000,0x20, -0x7fef7fe0,0x108020,0x20,0x8000, -0x800000,0x8020, -0x7fef8000,0x100000, -0x8020, fffffe0,0x100020,0x108000,0, -0x7fff8000,0x8020, -0x80000000, -0x7fefffe0, -0x7fef7fe0,0x108000);
var spfunction3 = array baru (0x208,0x8020200,0,0x802008,0x8000200,0x208,0x8000200,0x20008,0x8000008,0x800.0008,00000008,000008,000008,000008,000008,00000808080808,000.0008,000.000 020200.0x200.0x20200.0x8020000, 0x8020008.0x208.0x8000208.0x20200.0x20000.0x8000208.0x8.0x80208.0x20000.0x800000000.0x8020200.0200000000.0x28.0x208.02002002800.028008008.0280028.0280028.020028.020028.020028 , 0x8020208,0x8000200,0x8000008,0x200,0, 0x8020008.0x8000208.0x20000.0x8000000.0x80208.0x8.0x208.0x2020000.00080008.0x8020000.0x80008.02808.0x802000028.028.0008.028.028.028.028.028.028.028.028.028.028.028.028.028.028.028.028.000
var spfunction4 = array baru (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x80011,0x2001,0x802.000,0x802000,0x802081,0x81,0x81,0x8081081,0x81,0x8081,0x8081,0x80 000.0x802001.0x80.0x800000, 0x2001.0x2080.0x800081.0x1.0x2080.0x800080.0x2000.0x802080.0x802081.0x81.0x800080800081081.0x802000.0x802081.0x81.02000.02000.0281.0281.0281.010281.0281.0281.0281.0281.0281.0281 00081.0x1.0x802001.0x2081.0x2081, 0x80.0x802081.0x81.0x1.0x2000.0x800001.0x2001.0x802080.0x800081.0x2001.0x2080.0x800000.0x802001.0x80.0x800000.0.000.02.000.020010.0x802.000.0x80.000.0x80.000.02.000.02.000.02.000.02.000
var spfunction5 = array baru (0x100.0x2080100.0x2080000.0x42000100.0x80000.0x100.0x400000.000.0x2080000.0x40080100.010000000000100100100.0x40080100100100100100100100100100100100100100100100100100100100100100100 00000.0x2000000.0x40080000.0x40080000.0.0x40000100.0x42080100, 0x42080100.0x2000100.0x42080000.0x40000100.0x42000000.0x2080100.0x200000000.0x42000000.0x8010020000000000000000000000000000.000.00000.000.00000.000.000.000.00000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. 0080100.0x2000100.0x40000000.0x42080000.0x2080100.0x40080100.0x100.0x2000000, 0x42080000.0x42080100.0x80100.0x42000000.0x42080100.0x2080000.0x40080000.0x4200000000.0x80100.00000800.0x40000100100.0x800100.00000800.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000
var spfunction6 = new Array (0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010, 0x10.0x20400010.0x20400010,0x404010.0x20404000.0x4010.0x404000.0x404000.0x20000000.0x20004040404040404000.0x404000.040404040404040404040404040404040404040404040404040404.000,04040404040404040404.000,04000,0404000,0404000,04000,0404000,04000,04000,0404000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000 0x20004000.0x20000000.0x4010.0x20000010.0x20404010.0x404000, 0x20400000.0x404010,0x20404000,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x404010,0x20404000,0x200000,04000,010,040404000,0x200000,000.000,04010404040404000,000000,000.000,000.000,0000204040404040404040404040404.000,04000,040404000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000,04000
var spfunction7 = array baru (0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0x4000002,0x2,0x2.000,0200.000,0x4000002,0x2,0x2,0x2,0x2,0x2,0x2, 200802,0x200002,0x4000800,0x4000002,0x4200000, 0x4200800.0x200002.0x4200000.0x800.0x802.0x4200802.0x200800.0x2.0x400000000.0x200800.0x4000000.0200800.0x200000,0x400080280282800.0x200000,0400082802800.0200.000.0200.000.0200.000.0200.000.0200.000. , 0x200002.0x4000000.0x4000800,0x200000,0x4200800,0x802,0x200802, 0x4200800.0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002222,0x40008.000,000.000,000,0x400000222222,0x40008.000
var spfunction8 = array baru (0x10001040.0x1000.0x40000.0x10041040.0x100000.0x10001040.0x40.0x100000.0x400410410410040000.0x1004040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404041 10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040, 0x10040040.0x10041000.0x1040,0.0x10040040.0x10000040.0x100010001000100100100400.0410041000.0x1000.0x40401040000.041000.0x400.0404040400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.0400.04002400. , 0x40.0x10000040.0x10040000.0x10040040.0x10000000.0x40000, 0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000);
// Buat 16 atau 48 subkey yang kita butuhkan
var keys = des_createkeys (kunci);
var m = 0, i, j, temp, temp2, right1, right2, kiri, kanan, perulangan;
var cbcleft, cbcleft2, cbcright, cbcright2
var endloop, loopinc;
var len = pesan.length;
var chunk = 0;
// Siapkan loop untuk satu dan triple des
var iterasi = keys.length == 32? 3: 9; // Single atau Triple Des
if (iterations == 3) {looping = enkripsi? Array Baru (0, 32, 2): Array Baru (30, -2, -2);}
selain itu {looping = enkripsi? Array baru (0, 32, 2, 62, 30, -2, 64, 96, 2): Array baru (94, 62, -2, 32, 64, 2, 30, -2, -2);}
// PAD pesan tergantung pada parameter padding
if (padding == 2) pesan += ""; // Pad Pesan dengan Spaces
lain jika (padding == 1) {temp = 8- (len%8); pesan += string.fromCharCode (temp, temp, temp, temp, temp, temp, temp, temp); if (temp == 8) len+= 8;} // pkcs7 padding
lain jika (! Padding) pesan += "/0/0/0/0/0/0/0/0"; // Pades pesan dengan nol byte
// Simpan hasilnya di sini
hasil = "";
Tempresult = "";
if (mode == 1) {// mode CBC
cbcleft = (iv.charcodeat (m ++) << 24) | (IV.Charcodeat (M ++) << 16) | (IV.Charcodeat (M ++) << 8) | IV.Charcodeat (M ++);
cbcright = (iv.charcodeat (m ++) << 24) | (IV.Charcodeat (M ++) << 16) | (IV.Charcodeat (M ++) << 8) | IV.Charcodeat (M ++);
m = 0;
}
// Lingkari setiap potongan pesan 64 bit
while (m <len) {
left = (message.charcodeat (m ++) << 24) | (message.charcodeat (m ++) << 16) | (message.charcodeat (m ++) << 8) | message.charcodeat (m ++);
Right = (message.charcodeat (m ++) << 24) | (message.charcodeat (m ++) << 16) | (message.charcodeat (m ++) << 8) | message.charcodeat (m ++);
// Untuk mode rantai blok cipher, xor pesan dengan hasil sebelumnya
if (mode == 1) {if (encrypt) {left ^= cbcleft; kanan ^= cbcright;} else {cbcleft2 = cbcleft; cbcright2 = cbcright; cbcleft = kiri; cbcright = kanan;}}
// Pertama masing -masing 64 tetapi potongan pesan harus diizinkan sesuai dengan IP
temp = ((kiri >>> 4) ^ kanan) & 0x0f0f0f0f; benar ^= temp; kiri ^= (temp << 4);
temp = ((kiri >>> 16) ^ kanan) & 0x0000ffff; benar ^= temp; kiri ^= (temp << 16);
temp = ((kanan >>> 2) ^ kiri) & 0x33333333; kiri ^= temp; kanan ^= (temp << 2);
temp = ((kanan >>> 8) ^ kiri) & 0x00ff00ff; kiri ^= temp; kanan ^= (temp << 8);
temp = ((kiri >>> 1) ^ kanan) & 0x5555555; benar ^= temp; kiri ^= (temp << 1);
kiri = ((kiri << 1) | (kiri >>> 31));
kanan = ((kanan << 1) | (kanan >>> 31));
// Lakukan ini baik 1 atau 3 kali untuk setiap potongan pesan
untuk (j = 0; j <iterasi; j+= 3) {
endloop = looping [j+1];
loopinc = looping [j+2];
// Sekarang pergi dan lakukan enkripsi atau dekripsi
untuk (i = looping [j]; i! = endloop; i+= loopinc) {// untuk efisiensi
Right1 = kanan ^ tombol [i];
right2 = ((kanan >>> 4) | (kanan << 28)) ^ Keys [i+1];
// Hasilnya dicapai dengan melewati byte ini melalui fungsi seleksi S
temp = kiri;
kiri = kanan;
kanan = temp ^ (spfunction2 [(right1 >>> 24) & 0x3f] | spfunction4 [(right1 >>> 16) & 0x3f]
| spfunction6 [(right1 >>> 8) & 0x3f] | spfunction8 [right1 & 0x3f]
| spfunction1 [(right2 >>> 24) & 0x3f] | spfunction3 [(right2 >>> 16) & 0x3f]
| spfunction5 [(right2 >>> 8) & 0x3f] | spfunction7 [right2 & 0x3f]);
}
temp = kiri; kiri = kanan; benar = temp; // Kiri dan kanan yang tidak terbalik
} // untuk 1 atau 3 iterasi
// Pindah kemudian masing -masing bit ke kanan
kiri = ((kiri >>> 1) | (kiri << 31));
kanan = ((kanan >>> 1) | (kanan << 31));
// Sekarang lakukan IP-1, yang merupakan IP dalam arah yang berlawanan
temp = ((kiri >>> 1) ^ kanan) & 0x5555555; benar ^= temp; kiri ^= (temp << 1);
temp = ((kanan >>> 8) ^ kiri) & 0x00ff00ff; kiri ^= temp; kanan ^= (temp << 8);
temp = ((kanan >>> 2) ^ kiri) & 0x33333333; kiri ^= temp; kanan ^= (temp << 2);
temp = ((kiri >>> 16) ^ kanan) & 0x0000ffff; benar ^= temp; kiri ^= (temp << 16);
temp = ((kiri >>> 4) ^ kanan) & 0x0f0f0f0f; benar ^= temp; kiri ^= (temp << 4);
// Untuk mode rantai blok cipher, xor pesan dengan hasil sebelumnya
if (mode == 1) {if (encrypt) {cbcleft = kiri; cbcright = kanan;} else {kiri ^= cbcleft2; kanan ^= cbcright2;}}
Tempresult += String.FromCharCode ((kiri >>> 24), ((kiri >>> 16) & 0xff), ((kiri >>> 8) & 0xff), (kiri & 0xff), (kanan >>> 24), ((kanan >>> 16) & 0xff), ((kanan >>> 8) & 0xff), (kanan & 0xff));
chunk += 8;
if (chunk == 512) {result += tempresult; Tempresult = ""; chunk = 0;}
} // untuk setiap 8 karakter, atau 64 bit dalam pesan
// kembalikan hasilnya sebagai array
Hasil pengembalian + Tempresult;
} // Akhir DES
// des_createkeys
// Ini membutuhkan input kunci 64 bit (meskipun hanya 56 bit yang digunakan)
// sebagai array 2 bilangan bulat, dan mengembalikan 16 48 kunci bit
fungsi des_createkeys (key) {
// mendeklarasikan ini secara lokal mempercepat segalanya
PC2BYTES0 = array baru (0,0x4,0x20000000,0x2000054,0x10000,0x10004,0x20010000,0x20010004,0x200,0104,0200200200,0x200204,0x102004,01024,0x2005.0x104,0122002002002004,0x104,012200
PC2BYTES1 = Array Baru (0,0x1.0x100000.0x100001.0x4000000.0x4000001.0x4100000.0x4100001.0x100.0x101.0x1001001001001101.0x40001001001.0x40001001001001001001.0x40001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001
pc2bytes2 = array baru (0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8.0x800,0x808.0x100000000,0x1000008.0008,0x1000800808080808089.000,0x1000008.0008.0008,0x100080808080808089.000
pc2bytes3 = array baru (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x802200,0x8220000,0x2000,02222200,0x8220000,0x2000,02202222200,0,022200,0,0,02000,0220222200,0,02202200,0,022022200,0202222200220020202200
pc2bytes4 = array baru (0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010);
pc2bytes5 = array baru (0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x200000000,0x2000400,0x2002020,0x2000420,0x200000000,0x2400,0x20020);
pc2bytes6 = array baru (0,0x10000000,0x80000,0x10080000,0x2,0x1000022,0x80002,0x100800022,0x100000,0x8002.01008000000,0x2,0x1002,0x1002,01002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x10020202020
PC2BytES7 = array baru (0,0x10000.0x800.0x10800.0x20000.000,0x20010000.0x20000800.0x210800.0x2000000.0x30000000000.00000800.0800.0x2000000200200200.0200.0x30800.0x200002002002200.0200.0x30800.0x2002002002200.02002008
pc2bytes8 = array baru (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x204000000,0x2000000,0x2022222220222222,0x20400022222200222222222222222222222222222222222222222222222222222222222222222222222222222220
pc2bytes9 = array baru (0,0x10000000,0x8,0x10000008,0x10000000,0x8,0x100008,0x400,0x10000400,0x408,0x10040408.0x400,0x100400400.0x100404040400.0x400.0x100400400400400400400400400400400400
pc2bytes10 = array baru (0,0x20,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x10202020,0x102000,0x102020);
pc2bytes11 = new Array (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200);
pc2bytes12 = array baru (0,0x1000.0x8000000.0x8001000.0x80000.0x81000.0x8080000.0x8081000.0x10.0110.0x8001010.0x80010.0x80010.0101011010101010.0x80010.0x80010.0110101010
pc2bytes13 = array baru (0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105);
// berapa banyak iterasi (1 untuk des, 3 untuk triple des)
var iterasi = key.length> 8? 3: 1; // diubah oleh Paul 16/6/2007 untuk menggunakan Triple DES untuk kunci 9+ byte
// Menyimpan tombol kembali
var keys = array baru (32 * iterasi);
// Sekarang tentukan shift kiri yang perlu dilakukan
var shift = array baru (0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);
// Variabel lain
var lefttemp, righttemp, m = 0, n = 0, temp;
untuk (var j = 0; j <iterasi; j ++) {// baik 1 atau 3 iterasi
kiri = (key.charcodeat (m ++) << 24) | (key.charcodeat (m ++) << 16) | (key.charcodeat (m ++) << 8) | key.charcodeat (m ++);
kanan = (key.charcodeat (m ++) << 24) | (key.charcodeat (m ++) << 16) | (key.charcodeat (m ++) << 8) | key.charcodeat (m ++);
temp = ((kiri >>> 4) ^ kanan) & 0x0f0f0f0f; benar ^= temp; kiri ^= (temp << 4);
temp = ((kanan >>> -16) ^ kiri) & 0x0000ffff; kiri ^= temp; kanan ^= (temp << -16);
temp = ((kiri >>> 2) ^ kanan) & 0x33333333; benar ^= temp; kiri ^= (temp << 2);
temp = ((kanan >>> -16) ^ kiri) & 0x0000ffff; kiri ^= temp; kanan ^= (temp << -16);
temp = ((kiri >>> 1) ^ kanan) & 0x5555555; benar ^= temp; kiri ^= (temp << 1);
temp = ((kanan >>> 8) ^ kiri) & 0x00ff00ff; kiri ^= temp; kanan ^= (temp << 8);
temp = ((kiri >>> 1) ^ kanan) & 0x5555555; benar ^= temp; kiri ^= (temp << 1);
// Sisi kanan perlu digeser dan untuk mendapatkan empat bit terakhir dari sisi kiri
temp = (kiri << 8) | ((kanan >>> 20) & 0x000000f0);
// Kiri harus dibalik
kiri = (kanan << 24) | ((kanan << 8) & 0xff0000) | ((kanan >>> 8) & 0xff00) | ((kanan >>> 24) & 0xf0);
benar = temp;
// Sekarang pergi dan lakukan shift ini di tombol kiri dan kanan
untuk (var i = 0; i <shifts.length; i ++) {
// Geser tombol salah satu atau dua bit ke kiri
if (shifts [i]) {left = (kiri << 2) | (kiri >>> 26); kanan = (kanan << 2) | (kanan >>> 26);}
else {left = (kiri << 1) | (kiri >>> 27); kanan = (kanan << 1) | (kanan >>> 27);}
Kiri & = -0xf; kanan & = -0xf;
// Sekarang terapkan PC-2, sedemikian rupa sehingga E lebih mudah saat mengenkripsi atau mendekripsi
// Konversi ini akan terlihat seperti PC-2 kecuali hanya 6 bit terakhir dari setiap byte yang digunakan
// daripada 48 bit berturut -turut dan urutan garis akan sesuai dengan
// Bagaimana fungsi seleksi S akan diterapkan: S2, S4, S6, S8, S1, S3, S5, S7
leftTemp = pc2bytes0 [kiri >>> 28] | pc2bytes1 [(kiri >>> 24) & 0xf]
| pc2bytes2 [(kiri >>> 20) & 0xf] | pc2bytes3 [(kiri >>> 16) & 0xf]
| pc2bytes4 [(kiri >>> 12) & 0xf] | pc2bytes5 [(kiri >>> 8) & 0xf]
| pc2bytes6 [(kiri >>> 4) & 0xf];
RightTemp = pc2bytes7 [kanan >>> 28] | pc2bytes8 [(kanan >>> 24) & 0xf]
| pc2bytes9 [(kanan >>> 20) & 0xf] | pc2bytes10 [(kanan >>> 16) & 0xf]
| pc2bytes11 [(kanan >>> 12) & 0xf] | pc2bytes12 [(kanan >>> 8) & 0xf]
| pc2bytes13 [(kanan >>> 4) & 0xf];
temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;
kunci [n ++] = lefttemp ^ temp; kunci [n ++] = righttemp ^ (temp << 16);
}
} // untuk setiap iterasi
// kembalikan kunci yang telah kami buat
kunci kembali;
} // akhir des_createkeys
////////////////////////////// TES /////////////////// ////////////
function stringToHex (s) {
var r = "0x";
var hexes = array baru ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "B", "C", "D", "E", "F");
untuk (var i = 0; i <s.length; i ++) {r += hexes [s.charcodeat (i) >> 4] +hexes [s.charcodeat (i) & 0xf];}
mengembalikan r;
}
fungsi hextoString (h) {
var r = "";
untuk (var i = (h.substr (0, 2) == "0x")? 2: 0; i <h.length; i += 2) {r += string.fromCharCode (parseInt (h.substr (i , 2), 16));}
mengembalikan r;
}
var key = "Ini adalah kunci 24 byte !!";
var message = "Ini adalah pesan uji";
var ciphertext = des (kunci, pesan, 1, 0);
Document.writeln ("DES Test:" + StringToHex (ciphertext));