复制代码代码如下:
// بول تيرو ، يوليو 2001
//http://www.tero.co.uk/des/
//
// محسّن للأداء مع كتل كبيرة من قبل مايكل هايورث ، نوفمبر 2001
//http://www.netdealing.com
//
// يتم توفير هذا البرنامج "كما هو" و
// أي ضمانات صريحة أو ضمنية ، بما في ذلك ، على سبيل المثال لا الحصر ،
// ضمانات ضمنية للتسويق والملاءمة لغرض معين
// تم إخلاءها. لن يكون المؤلف أو المساهمون مسؤولين بأي حال من الأحوال
// لأي شخص مباشر أو غير مباشر أو عرضي أو خاص أو مثالي أو نتيجة
// الأضرار (بما في ذلك ، على سبيل المثال لا الحصر ، شراء البضائع البديلة
// أو الخدمات ؛ فقدان الاستخدام أو البيانات أو الأرباح ؛ أو انقطاع الأعمال)
// ومع ذلك تسبب وعلى أي نظرية للمسؤولية ، سواء في العقد ، صارمة
// المسؤولية ، أو الضرر (بما في ذلك الإهمال أو غير ذلك) الناشئة بأي شكل من الأشكال
// من استخدام هذا البرنامج ، حتى لو تم نصحه بإمكانية
// مثل هذا الضرر.
// des
// هذا يأخذ المفتاح ، والرسالة ، وما إذا كان للتشفير أو فك التشفير
وظيفة des (المفتاح ، الرسالة ، تشفير ، الوضع ، الرابع ، الحشو) {
// الإعلان عن هذا السرعة محليا الأمور قليلاً
var spfunction1 = صفيف جديد (0x1010400،0،0x10000،0x1010404،0x1010004،0x10404 ، 0x1000400،0x10400،0x10400،0x1010000 ، 0x1010000،0x1000404،0x10004،0x1000004،0x1000004،0x10004،0،0،0،0404،0x10404،0x1000000،0x1000000،0x104040404،0x4،0x1010000،0x10 10000،0x10400،0x1000004،0x400،0x4،0x1000404 ، 0x10404،0x1040404،0x10004،0x10100،0x1000404،0x1000004،0x404،0x10404،0x1010400،0x404،0x1000400،0x1000400،0،0x10004،0x10،0،0x1010004) ؛
var spfunction2 = صفيف جديد (-0x7fef7fe0 ، -0x7fff8000،0x8000،0x108020،0x100000،0x20 ، -0x7fefffe0 ، -0x7fff7fe0 ، -0x7fffffe0 ، -0x7f7fe0 ، -0x7fef8000 ، -0x800000000000000000 ، -0x700000 ، 0x20 ، -0x7fefffe0،0x108000 ، 0x100020 ، -0x7fff7fe0،0 ، -0x80000000،0x8000،0x108020 ، -0x7ff00000،0x100020 ، -0x7fffffe0،0x1080،0x8020 ، -0x7f8000 ، -0x7ff00،0x8020،0،0x80 ، 0x7fff7fe0 ، -0x7ff00000 ، -0x7fef8000،0x8000 ، -0x7ff00000 ، -0x7fff8000،0x20 ، -0x7fef7fe0،08020،0x2000 ، -0x80000000،0x8020 ، -0x7ff8000،0x100000 ،- 0،0x100020،0x108000،0 ، -0x7fff8000،0x8020 ، -0x80000000 ، -0x7fffe0 ، -0x7fef7fe0،0x108000) ؛
var spfunction3 = صفيف جديد (0x208،0x8020200،0،0x8020008،0x8000200،0،0،0x20208،0x8000200،0x20008،0x8000008،0x8000008،0x20000،0x8020208،0x2000 8020200،0x200،0x20200،0x8020000 ، 0x8020008،0x20208،0x8000208،0x20200،0x20000،0x8000208،0x80202020208،0x200،0x8000000،0x802020200،0x8000000000000،0x20008،0x200 ، 0x8020208،0x8000200،0x8000008،0x200،0 ، 0x8020008،0x8000208،0x20000،0x8000000،0x8020208،0x8،0x2020208،0x20200،0x8000008،0x8020000،0x80002020208،0x208،0x80200،0x20208،0x80x802000)
var spfunction4 = new Array (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000, 0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081, 0x80،0x802081،0x81،0x1،0x2000،0x800001،0x2001،0x802080،0x800081،0x2001،0x2080،0x800000،0x802001،0x80،0x800،000،0x2000،0x802080) ؛
var spfunction5 = new Array (0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100);
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،0،0x404010،0x20404000،0x4010،0x404000 ، 0x20004000،0x20000000،0x4010،0x20000010،0x204010،0x404000 0x20400000،0x404010،0x20404000،0،0x20400010،0x10،0x4000،0x20400000،0x404010،0x4000،0x400010،0x20004010،0،0x20404000،0x20000،000،0x4000،0x2000) ؛
var spfunction7 = صفيف جديد (0x200000،0 × 4200002،0x4000802،0،0x800،0x4000802،0x200802،0x4200800،0x4200802،0x200000،0،0x4000002،0x2،0x40000000000 x200802،0x200002،0x4000800،0x4000002،0x4200000 ، 0x4200800،0x200002،0x4200000،0x800،0x802،0x4200802،0x200800،0x2،0x4000000،0x200800،0x4200000000،0x200800،0x200،000،0x4000802،0x4202،0x42،0x42،0x42،0x42،0x42 ، 0x200002،0x4000000،0x4000800،0x200000،0x4200800،0x802،0x200802 ، 0x4200800،0x802،0x4000002،0x4200802،0x4200000،0x200800،0،0x2،0x4200802،0،0x200802،0x4200000،0x800،0x4000002،0x4000800،0x2002) ؛
var spfunction8 = صفيف جديد (0x10001040،0x1000،0x40000،0x10041040،0x10000000،0x10001040،0x40،0x10000000،0x404040،0x100400،0x10040404040 x10040000،0x10000040،0x10001000،0x1040،0x41000،0x40040 ، 0x10040040،0x10041000،0x1040،0،0،0،0x10040040،0x10000040،0x10001000،0x41040،0x40000،0x4104040،0x400000000 × 0x10041000 ، ، 0x40،0x10000040،0x10040000،0x10040040،0x10000000،0x40000 ، 0x10001040،0،0x10041040،0x40040،0x10000040،0x10040000،0x1000،000،0x10001040،0،0x10041040،0x41000،0x41000،000،0x1040،0x10
// قم بإنشاء مفاتيح فرعية 16 أو 48
var keys = des_createkeys (مفتاح) ؛
var m = 0 ، i ، j ، temp ، temp2 ، right1 ، right2 ، اليسار ، اليمين ، حلقة ؛
var cbcleft ، cbcleft2 ، cbcright ، cbcright2
var endloop ، loopinc ؛
var len = message.length ؛
var chunk = 0 ؛
// قم بإعداد الحلقات لفرد وثلاثية des
var تكرار = Keys.Length == 32؟ 3: 9 ؛ // واحد أو ثلاثي des
if (تكرار == 3) {looping = encrypt؟ صفيف جديد (0 ، 32 ، 2): صفيف جديد (30 ، -2 ، -2) ؛}
آخر {looping = encrypt؟ صفيف جديد (0 ، 32 ، 2 ، 62 ، 30 ، -2 ، 64 ، 96 ، 2): صفيف جديد (94 ، 62 ، -2 ، 32 ، 64 ، 2 ، 30 ، -2 ، -2) ؛}
// PAD الرسالة اعتمادًا على معلمة الحشو
if (padding == 2) message += "" ؛ // pad الرسالة بالمسافات
آخر if (padding == 1) {temp = 8- (len ٪ 8) ؛ message += string.fromcharcode (temp ، temp ، temp ، temp ، temp ، temp ، temp ، temp) ؛ إذا (temp == 8) len+= 8 ؛} // pkcs7 padding
وإلا // PAD الرسالة مع بايت لاخار
// تخزين النتيجة هنا
النتيجة = "" ؛
tempresult = "" ؛
if (mode == 1) {// cbc mode
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 ++) ؛
م = 0 ؛
}
// حلقة من خلال كل قطعة 64 بت من الرسالة
بينما (m <len) {
left = (message.charcodeat (m ++) << 24) | (message.charcodeat (M ++) << 16) | (message.charcodeat (M ++) << 8) | message.charcodeat (m ++) ؛
يمين = (message.charcodeat (m ++) << 24) | (message.charcodeat (M ++) << 16) | (message.charcodeat (M ++) << 8) | message.charcodeat (m ++) ؛
// لوضع التسلسل للكتلة المشفرة ، XOR الرسالة بالنتيجة السابقة
if (mode == 1) {if (encrypt) {left ^= cbcleft ؛ اليمين ^= cbcright ؛} آخر {cbcleft2 = cbcleft ؛ CBCRIGHT2 = CBCRIGHT ؛ cbcleft = اليسار ؛ cbcright = يمين ؛}}
// أولاً كل 64 ولكن يجب أن يتم وضع جزء كبير من الرسالة وفقًا لـ IP
temp = ((يسار >>> 4) ^ يمين) و 0x0f0f0f0f ؛ اليمين ^= temp ؛ اليسار ^= (temp << 4) ؛
temp = ((يسار >>> 16) ^ يمين) & 0x0000ffff ؛ اليمين ^= temp ؛ اليسار ^= (temp << 16) ؛
temp = ((يمين >>> 2) ^ اليسار) & 0x33333333 ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << 2) ؛
temp = ((يمين >>> 8) ^ اليسار) & 0x00FF00FF ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << 8) ؛
temp = ((يسار >>> 1) ^ يمين) و 0x55555555 ؛ اليمين ^= temp ؛ اليسار ^= (temp << 1) ؛
اليسار = ((يسار << 1) | (اليسار >>> 31)) ؛
يمين = ((يمين << 1) | (يمين >>> 31)) ؛
// افعل هذا إما 1 أو 3 مرات لكل جزء من الرسالة
لـ (j = 0 ؛ j <التكرارات ؛ j+= 3) {
endloop = looping [j+1] ؛
loopinc = looping [j+2] ؛
// الآن انتقل وأداء التشفير أو فك التشفير
لـ (i = looping [j] ؛ i! = endloop ؛ i+= loopinc) {// للكفاءة
right1 = right ^ Keys [i] ؛
يمين 2 = ((يمين >>> 4) | (يمين << 28)) ^ مفاتيح [i+1] ؛
// يتم تحقيق النتيجة عن طريق تمرير هذه البايتات من خلال وظائف اختيار S
درجة الحرارة = اليسار ؛
اليسار = يمين ؛
يمين = temp ^ (spfunction2 [(right1 >>> 24) & 0x3f] | spFunction4 [(right1 >>> 16) & 0x3f]
| spfunction6 [(right1 >>> 8) & 0x3f] | spfunction8 [يمين 1 و 0x3F]
| spfunction1 [(right2 >>> 24) & 0x3f] | spfunction3 [(right2 >>> 16) & 0x3F]
| spfunction5 [(right2 >>> 8) & 0x3f] | spFunction7 [right2 & 0x3f]) ؛
}
درجة الحرارة = اليسار ؛ اليسار = يمين ؛ اليمين = درجة الحرارة ؛ // غير عكس اليسار واليمين
} // إما تكرارات 1 أو 3
// تحرك ثم كل واحد إلى اليمين
اليسار = ((اليسار >>> 1) | (اليسار << 31)) ؛
يمين = ((يمين >>> 1) | (يمين << 31)) ؛
// الآن قم بتنفيذ IP-1 ، وهو IP في الاتجاه المعاكس
temp = ((يسار >>> 1) ^ يمين) و 0x55555555 ؛ اليمين ^= temp ؛ اليسار ^= (temp << 1) ؛
temp = ((يمين >>> 8) ^ اليسار) & 0x00FF00FF ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << 8) ؛
temp = ((يمين >>> 2) ^ اليسار) & 0x33333333 ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << 2) ؛
temp = ((يسار >>> 16) ^ يمين) & 0x0000ffff ؛ اليمين ^= temp ؛ اليسار ^= (temp << 16) ؛
temp = ((يسار >>> 4) ^ يمين) و 0x0f0f0f0f ؛ اليمين ^= temp ؛ اليسار ^= (temp << 4) ؛
// لوضع التسلسل للكتلة المشفرة ، XOR الرسالة بالنتيجة السابقة
if (mode == 1) {if (encrypt) {cbcleft = left ؛ cbCright = right ؛} آخر {left ^= cbcleft2 ؛ اليمين ^= cbcright2 ؛}}
tempresult += string.fromcharcode ((يسار >>> 24) ، ((يسار >>> 16) و 0xff) ، ((يسار >>> 8) و 0xff) ، (يسار و 0xff) ، (يمين >>> 24) ، ((يمين >>> 16) و 0xff) ، ((يمين >>> 8) و 0xff) ، (يمين و 0xff)) ؛
قطعة += 8 ؛
if (chunk == 512) {result += tempresult ؛ tempresult = "" ؛ قطعة = 0 ؛}
} // لكل 8 أحرف ، أو 64 بت في الرسالة
// إرجاع النتيجة كصفيف
نتيجة الإرجاع + tempresult ؛
} // نهاية des
// des_createkeys
// هذا يستغرق إدخال مفتاح 64 بت (على الرغم من استخدام 56 بت فقط)
// كمجموعة من الأعداد الصحيحة ، ويعيد 16 48 بت مفتاح
وظيفة des_createkeys (مفتاح) {
// الإعلان عن هذا السرعة محليا الأمور قليلاً
PC2BYTES0 = صفيف جديد (0،0x4،0x20000000،0x2000000004،0x10000،0x10004،0x20010000،0x20010004،0x200،0x204،0x2000020000200200،0x200200204 ،
PC2BYTES1 = صفيف جديد (0،0x1،0x100000،0x100001،0x4000000،0x4000001،0x4100000،0x4100001،0x100100100100100100100100100،0x100101،0x4000100100100100100
PC2BYTES2 = صفيف جديد (0،0x8،0x800،0x808،0x1000000،0x1000008،0x1000800،0x1000808،0،0x800،0x800،0x808،0x10000،0x1000008،0x1000800،0x10008) ؛
pc2bytes3 = new Array (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000);
PC2BYTES4 = صفيف جديد (0،0x40000،0x10،0x40010،0،0x40000،0x10،0x40010،0x1000،0x41000،0x1010،0x41010،0x1000،0x41000،0x10،0،0x41010) ؛
PC2BYTES5 = صفيف جديد (0،0x400،0x20،0x420،0،0x400،0x20،0x420،0x2000000،0x2000400،0x2000020،0x2000420،0x200000000،0x2000400،0x20000،0،0x2000420) ؛
PC2BYTES6 = صفيف جديد (0،0x10000000،0x80000،0x100800،0x2،0x10000002،0x80002،0x10080002،0،0x10000000،0x80000،0x10080000،0x2،0x1000000002،0x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x100x.
pc2bytes7 = new Array (0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800);
pc2bytes8 = new Array (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002);
pc2bytes9 = new Array (0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408);
PC2BYTES10 = صفيف جديد (0،0x20،0،0،0،0x100000،0x100020،0x100000،0x100020،0x2000،0x2020،0x2000،0x2020،0x102000،0x1020،0x102000،0x1020) ؛
pc2bytes11 = new Array (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200);
PC2BYTES12 = صفيف جديد (0،0x1000،0x8000000،0x8001000،0x80000،0x81000،0x8080000،0x8081000،0x101010101010،0x80010،0x8001010،0x80010،0x80101010101010،0110،0x8010،0x800،0x800،0x80،0x80،0x80،0x80،0x80،0x80،0x80،0x80،0x80،0x800،0x80،0x80،0x800،0x800،0x800،0x80،0x800،0x800،0x800،0x800،0x800،0x800،0x800،0x800،0x800،0x800،
PC2BYTES13 = صفيف جديد (0،0x4،0x100،0x104،0،0x4،0x100،0x104،0x1،0x501،0x105،0x1،0x5،0x101،0x105) ؛
// كم عدد التكرارات (1 لـ DES ، 3 لـ Triple des)
var تكرار = key.length> 8؟ 3: 1 ؛ // تم تغييره بواسطة Paul 16/6/2007 لاستخدام Triple des لـ 9+ مفاتيح بايت
// يخزن مفاتيح العودة
Var Keys = صفيف جديد (32 * تكرار) ؛
// حدد الآن التحولات اليسرى التي يجب القيام بها
var quifts = صفيف جديد (0 ، 0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0) ؛
// متغيرات أخرى
var lefttemp ، righttemp ، m = 0 ، n = 0 ، temp ؛
لـ (var j = 0 ؛ j <تكرارات ؛ j ++) {// إما 1 أو 3 تكرار
اليسار = (key.charcodeat (m ++) << 24) | (key.charcodeat (m ++) << 16) | (key.charcodeat (m ++) << 8) | key.charcodeat (m ++) ؛
يمين = (key.charcodeat (m ++) << 24) | (key.charcodeat (m ++) << 16) | (key.charcodeat (m ++) << 8) | key.charcodeat (m ++) ؛
temp = ((يسار >>> 4) ^ يمين) و 0x0f0f0f0f ؛ اليمين ^= temp ؛ اليسار ^= (temp << 4) ؛
temp = ((يمين >>> -16) ^ اليسار) & 0x0000ffff ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << -16) ؛
temp = ((يسار >>> 2) ^ يمين) و 0x33333333 ؛ اليمين ^= temp ؛ اليسار ^= (temp << 2) ؛
temp = ((يمين >>> -16) ^ اليسار) & 0x0000ffff ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << -16) ؛
temp = ((يسار >>> 1) ^ يمين) و 0x55555555 ؛ اليمين ^= temp ؛ اليسار ^= (temp << 1) ؛
temp = ((يمين >>> 8) ^ اليسار) & 0x00FF00FF ؛ اليسار ^= درجة الحرارة ؛ اليمين ^= (temp << 8) ؛
temp = ((يسار >>> 1) ^ يمين) و 0x55555555 ؛ اليمين ^= temp ؛ اليسار ^= (temp << 1) ؛
// يحتاج الجانب الأيمن إلى تغيير الحصول على آخر أربعة بتات من الجانب الأيسر
temp = (اليسار << 8) | ((يمين >>> 20) و 0x000000f0) ؛
// اليسار يجب وضعه رأسًا على عقب
اليسار = (يمين << 24) | ((يمين << 8) و 0xFF0000) | ((يمين >>> 8) و 0xFF00) | ((يمين >>> 24) و 0xf0) ؛
اليمين = درجة الحرارة ؛
// الآن انتقل وأداء هذه التحولات على المفاتيح اليسرى واليمين
لـ (var i = 0 ؛ i <difts.length ؛ i ++) {
// قم بتحويل المفاتيح إما بتات أو اثنين إلى اليسار
if (تحول [i]) {left = (left << 2) | (اليسار >>> 26) ؛ يمين = (يمين << 2) | (يمين >>> 26) ؛}
آخر {left = (left << 1) | (اليسار >>> 27) ؛ يمين = (يمين << 1) | (يمين >>> 27) ؛}
يسار & = -0xf ؛ الحق و = -0xf ؛
// الآن تطبيق PC-2 ، بطريقة تكون E أسهل عند التشفير أو فك التشفير
// سيبدو هذا التحويل مثل PC-2 باستثناء فقط الستة الأخيرة من كل بايت تستخدم
// بدلاً من 48 بتات متتالية وسيكون ترتيب الخطوط وفقًا
// كيف سيتم تطبيق وظائف اختيار S: S2 ، S4 ، S6 ، S8 ، S1 ، S3 ، S5 ، S7
LeftTemp = pc2bytes0 [left >>> 28] | PC2BYTES1 [(LEFT >>> 24) & 0XF]
| PC2BYTES2 [(LEFT >>> 20) & 0XF] | pc2bytes3 [(اليسار >>> 16) و 0xf]
| PC2BYTES4 [(LEFT >>> 12) & 0XF] | pc2bytes5 [(اليسار >>> 8) و 0xf]
| pc2bytes6 [(Left >>> 4) & 0xf] ؛
RightTemp = pc2bytes7 [يمين >>> 28] | pc2bytes8 [(يمين >>> 24) و 0xf]
| PC2Bytes9 [(يمين >>> 20) و 0xf] | pc2bytes10 [(يمين >>> 16) و 0xf]
| pc2bytes11 [(يمين >>> 12) و 0xf] | PC2BYTES12 [(يمين >>> 8) و 0xF]
| pc2bytes13 [(يمين >>> 4) & 0xf] ؛
temp = ((rightTemp >>> 16) ^ LeftTemp) & 0x0000ffff ؛
مفاتيح [n ++] = LeftTemp ^ temp ؛ المفاتيح [n ++] = rightTemp ^ (temp << 16) ؛
}
} // لكل تكرار
// إرجاع المفاتيح التي أنشأناها
إرجاع مفاتيح
} // نهاية des_createkeys
////////////////////////////// امتحان /////////////////// ///////////
وظيفة stringtoex (s) {
var r = "0x" ؛
var hexes = new Array ("0" ، "1" ، "2" ، "3" ، "4" ، "5" ، "6" ، "7" ، "8" ، "9" ، "A" ، "B" ، "C" ، "D" ، "E" ، "F") ؛
لـ (var i = 0 ؛ i <s.length ؛ i ++) {r += hexes [s.charcodeat (i) >> 4] +hexes [s.charcodeat (i) & 0xf] ؛}
العودة ص.
}
وظيفة HextoString (H) {
var r = "" ؛
لـ (var i = (h.substr (0 ، 2) == "0x")؟ 2: 0 ؛ i <h.length ؛ i += 2) {r += string.fromcharcode (parseint (h.substr (i ، 2) ، 16)) ؛}
العودة ص.
}
var key = "هذا هو مفتاح 24 بايت !!" ؛
VAR Message = "هذه رسالة اختبار" ؛
var ciphertext = des (مفتاح ، رسالة ، 1 ، 0) ؛
document.writeln ("des test:" + stringtohex (ciphertext)) ؛