复制代码代码如下:
// Paul Tero, กรกฎาคม 2001
//http://www.tero.co.uk/des/
-
// ปรับให้เหมาะสมสำหรับการแสดงด้วยบล็อกขนาดใหญ่โดย Michael Hayworth, พฤศจิกายน 2544
//http://www.netdealing.com
-
// ซอฟต์แวร์นี้มีให้ "ตามสภาพ" และ
// การรับประกันโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะ
// การรับประกันโดยนัยเกี่ยวกับการค้าและความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ
// ถูกปฏิเสธ ไม่ว่าในกรณีใดผู้เขียนหรือผู้มีส่วนร่วมจะต้องรับผิดชอบ
// สำหรับทางตรงทางอ้อม, บังเอิญ, พิเศษ, เป็นแบบอย่างหรือเป็นผลสืบเนื่อง
// ความเสียหาย (รวมถึง แต่ไม่ จำกัด เพียงการจัดหาสินค้าทดแทน
// หรือบริการ; การสูญเสียการใช้งานข้อมูลหรือผลกำไร หรือการหยุดชะงักทางธุรกิจ)
// อย่างไรก็ตามเกิดขึ้นและทฤษฎีความรับผิดใด ๆ ไม่ว่าจะอยู่ในสัญญาเข้มงวด
// ความรับผิดหรือการละเมิด (รวมถึงความประมาทเลินเล่อหรืออื่น ๆ ) ที่เกิดขึ้นในทางใดทางหนึ่ง
// จากการใช้ซอฟต์แวร์นี้แม้ว่าจะได้รับคำแนะนำเกี่ยวกับความเป็นไปได้ของ
// ความเสียหายดังกล่าว
// des
// นี่ต้องใช้คีย์ข้อความและไม่ว่าจะเข้ารหัสหรือถอดรหัส
ฟังก์ชั่น des (คีย์, ข้อความ, เข้ารหัส, โหมด, iv, padding) {
// การประกาศความเร็วในท้องถิ่นนี้เพิ่มขึ้นเล็กน้อย
var spfunction1 = อาร์เรย์ใหม่ (0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x10040x10400,0x10400,0x10400 x1000400,0x10400,0x10400,0x1010000 0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x100000000000000,050000,050000,0500000000,0500000000,0500000000,0500000000,05000000000000,0x105000000 0000,0x10400,0x1000004,0x400,0x4,0x1000404 0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0x10400,04040404040404040400
var spfunction2 = อาร์เรย์ใหม่ (-0x7fef7fe0, -0x7ff8000,0x8000,0x108020,0x100000,0x20 00000,0x20, -0x7feffe0,0x108000 0x100020, -0x7fff7fe0,0, -0x80000000,0x8000,0x108020, -0x7ff00000,0x100020, -0x7fffffe , -0x7fff7fe0, -0x7ff00000 , -0x7fef8000,0x8000, -0x7ff00000, -0x7fff8000,0x20 fffe0,0x100020,0x108000,0 -0x7fff8000,0x8020, -0x80000000, -0x7fefffe0, -0x7fef7fe0,0x108000);
var spfunction3 = อาร์เรย์ใหม่ (0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x800020002000200020002008,020202020202020202020202020202020200 020200,0x200,0x20200,0x8020000 0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x802020200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200 0x8020208,0x8000200,0x8000008,0x200,0 0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x80200000000,0200200,0200200,0200200200200200200200200200200200200200200
var spfunction4 = อาร์เรย์ใหม่ (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0x802000,0x802000,0x8020202081,0x81,0x80200001,0x802001,0x80200001 000,0x802001,0x80,0x800000 0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x80201,0201,0000000000000000000000000000000002 81,0x1,0x802001,0x2081,0x2081 0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x8000000
var spfunction5 = อาร์เรย์ใหม่ (0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x20000,000100,0100100,0100100,0100100,0100100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0500100 00000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100 0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x20000,0x420000000000,0000000000000000000000000000000000000000000000000000000000000000000000000000000 80100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x40080100,0x100,0x2000000 0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x420000,0x80100,0x2000100,0x400001000000,05000000,050000,050000,050000,050000,050000,050000,050000
var spfunction6 = อาร์เรย์ใหม่ (0x20000010,0x20400000,0x4000,0x2040404010,0x20400000,0x10,0x2040404010,0x400000,0x20004000,0x40404010104040404040404040404040404040 X400010,0x20004010,0x4000,0x404000,0x20004010 0x10,0x20400010,0x20400010,0,0x40404010,0x20404000,0x4010,0x404000,0x204040402000000,040101401014020101401401401401400 x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000 0x20400000,0x404010,0x2040404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010x20004010,0x2040404040401010110
var spfunction7 = อาร์เรย์ใหม่ (0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0x4000002,0500002000020000200002000020000200 200802,0x200002,0x4000800,0x4000002,0x4200000 0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x40000,0x200800,0x40000,0x200800,0x200000,020000,020000,020000,020000,020000 0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802 0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x400000200200200
var spfunction8 = อาร์เรย์ใหม่ (0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10041100410410410410410410410410410410410 10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040 0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x100401000 0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000 0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x104040404040404040
// สร้าง 16 หรือ 48 subkeys ที่เราต้องการ
var keys = des_createkeys (คีย์);
var m = 0, i, j, temp, temp2, ขวา 1, ขวา 2, ซ้าย, ขวา, วนรอบ;
var cbcleft, cbcleft2, cbcright, cbcright2
var endloop, loopinc;
var len = message.length;
var chunk = 0;
// ตั้งค่าลูปสำหรับเดสเดี่ยวและทริปเปิ้ล
var iterations = keys.length == 32? 3: 9; // เดี่ยวหรือทริปเปิลเดส
if (iterations == 3) {looping = เข้ารหัส? อาร์เรย์ใหม่ (0, 32, 2): อาร์เรย์ใหม่ (30, -2, -2);}
อื่น {looping = เข้ารหัส? อาร์เรย์ใหม่ (0, 32, 2, 62, 30, -2, 64, 96, 2): อาร์เรย์ใหม่ (94, 62, -2, 32, 64, 2, 30, -2, -2, -2);}
// แผ่นข้อความขึ้นอยู่กับพารามิเตอร์การขยาย
ถ้า (padding == 2) ข้อความ += ""; // แผ่นข้อความด้วยช่องว่าง
อื่นถ้า (padding == 1) {temp = 8- (len%8); ข้อความ += string.fromCharcode (อุณหภูมิ, อุณหภูมิ, อุณหภูมิ, อุณหภูมิ, อุณหภูมิ, อุณหภูมิ, อุณหภูมิ, อุณหภูมิ); if (temp == 8) len+= 8;} // pkcs7 padding
อย่างอื่นถ้า (! padding) ข้อความ += "/0/0/0/0/0/0/0/0/0/0/0"; // pad ข้อความด้วยไบต์ Null
// เก็บผลลัพธ์ที่นี่
ผลลัพธ์ = "";
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 ++);
m = 0;
-
// วนผ่านข้อความ 64 บิตแต่ละอันของข้อความ
ในขณะที่ (m <len) {
ซ้าย = (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 ++);
// สำหรับโหมดการ chaining block cipher, xor ข้อความที่มีผลลัพธ์ก่อนหน้านี้
if (mode == 1) {ถ้า (เข้ารหัส) {ซ้าย ^= cbcleft; ขวา ^= cbcright;} else {cbcleft2 = cbcleft; cbcright2 = cbcright; cbcleft = ซ้าย; cbcright = ขวา;}}
// ก่อน 64 ครั้ง แต่ข้อความจะต้องได้รับการอนุญาตตาม IP
temp = ((ซ้าย >>> 4) ^ ขวา) & 0x0f0f0f0f; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 4);
temp = ((ซ้าย >>> 16) ^ ขวา) & 0x0000ffff; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 16);
temp = ((ขวา >>> 2) ^ ซ้าย) & 0x333333333; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << 2);
temp = ((ขวา >>> 8) ^ ซ้าย) & 0x00ff00ff; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << 8);
temp = ((ซ้าย >>> 1) ^ ขวา) & 0x55555555; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 1);
ซ้าย = ((ซ้าย << 1) | (ซ้าย >>> 31));
ขวา = ((ขวา << 1) | (ขวา >>> 31));
// ทำสิ่งนี้ 1 หรือ 3 ครั้งสำหรับแต่ละอันของข้อความ
สำหรับ (j = 0; j <iterations; j+= 3) {
endloop = วนลูป [j+1];
loopinc = looping [j+2];
// ตอนนี้ผ่านและทำการเข้ารหัสหรือถอดรหัส
สำหรับ (i = looping [j]; i! = endloop; i+= loopinc) {// เพื่อประสิทธิภาพ
ขวา 1 = ขวา ^ keys [i];
ขวา 2 = ((ขวา >>> 4) | (ขวา << 28)) ^ keys [i+1];
// ผลลัพธ์จะได้รับจากการส่งผ่านไบต์เหล่านี้ผ่านฟังก์ชั่นการเลือก S
อุณหภูมิ = ซ้าย;
ซ้าย = ขวา;
ขวา = temp ^ (spfunction2 [(ขวา 1 >>> 24) & 0x3f] | spfunction4 [(ขวา 1 >>> 16) & 0x3f]
- spfunction6 [(ขวา 1 >>> 8) & 0x3f] | spfunction8 [Right1 & 0x3f]
- spfunction1 [(ขวา 2 >>> 24) & 0x3f] | spfunction3 [(ขวา 2 >>> 16) & 0x3f]
- spfunction5 [(ขวา 2 >>> 8) & 0x3f] | spfunction7 [Right2 & 0x3f]);
-
อุณหภูมิ = ซ้าย; ซ้าย = ขวา; ขวา = อุณหภูมิ; // unreverse ซ้ายและขวา
} // สำหรับการทำซ้ำ 1 หรือ 3
// ย้ายจากนั้นแต่ละบิตไปทางขวา
ซ้าย = ((ซ้าย >>> 1) | (ซ้าย << 31));
ขวา = ((ขวา >>> 1) | (ขวา << 31));
// ตอนนี้ดำเนินการ IP-1 ซึ่งเป็น IP ในทิศทางตรงกันข้าม
temp = ((ซ้าย >>> 1) ^ ขวา) & 0x55555555; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 1);
temp = ((ขวา >>> 8) ^ ซ้าย) & 0x00ff00ff; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << 8);
temp = ((ขวา >>> 2) ^ ซ้าย) & 0x333333333; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << 2);
temp = ((ซ้าย >>> 16) ^ ขวา) & 0x0000ffff; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 16);
temp = ((ซ้าย >>> 4) ^ ขวา) & 0x0f0f0f0f; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 4);
// สำหรับโหมดการ chaining block cipher, xor ข้อความที่มีผลลัพธ์ก่อนหน้านี้
if (mode == 1) {ถ้า (เข้ารหัส) {cbcleft = ซ้าย; cbcright = ขวา;} else {ซ้าย ^= cbcleft2; ขวา ^= cbcright2;}}
tempresult += string.fromCharcode ((ซ้าย >>> 24), (ซ้าย >>> 16) & 0xff), (ซ้าย >>> 8) & 0xff), (ซ้าย & 0xff), (ขวา >>> 24), ((ขวา >>> 16) & 0xff), ((ขวา >>> 8) & 0xff), (ขวา & 0xff));
ก้อน += 8;
if (chunk == 512) {result += tempresult; tempresult = ""; chunk = 0;}
} // สำหรับทุกอักขระ 8 ตัวหรือ 64 บิตในข้อความ
// ส่งคืนผลลัพธ์เป็นอาร์เรย์
ส่งคืนผลลัพธ์ + tempresult;
} // สิ้นสุด DES
// des_createkeys
// สิ่งนี้ใช้เป็นอินพุตคีย์ 64 บิต (แม้ว่าจะใช้เพียง 56 บิตเท่านั้น)
// เป็นอาร์เรย์ของจำนวนเต็ม 2 ตัวและส่งคืนปุ่ม 16 48 บิต
ฟังก์ชั่น des_createkeys (คีย์) {
// การประกาศความเร็วในท้องถิ่นนี้เพิ่มขึ้นเล็กน้อย
PC2BYTES0 = อาร์เรย์ใหม่ (0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x200100100,0x20010004,0x200,020020020020020000200200200200200200200200200200200200200200200200200200200200200200200200200
PC2BYTES1 = อาร์เรย์ใหม่ (0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x1001001,0x4000100x4
PC2BYTES2 = อาร์เรย์ใหม่ (0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x100080x1000800
PC2BYTES3 = อาร์เรย์ใหม่ (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x2220000,0x80200200200200200200200200220000,0220000,0220000
PC2BYTES4 = อาร์เรย์ใหม่ (0,0X40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x410101010101010
PC2BYTES5 = อาร์เรย์ใหม่ (0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x20000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020020020,0x2000420
PC2BYTES6 = อาร์เรย์ใหม่ (0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x1000000,0x1008x2,0x1000000002,0x80000002
PC2BYTES7 = อาร์เรย์ใหม่ (0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x200800,0500,0008008008008008008008008008008008008008008008008008008008008008008008
PC2BYTES8 = อาร์เรย์ใหม่ (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x20000,0x2040000,0x2000000,0x2040000,0x200000000,0x2040000,0x2000000,040000,040000,040000,040000
PC2BYTES9 = อาร์เรย์ใหม่ (0,0X10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000008,0x400,0x10000400,08500,08,08,08,08500,08,08500,08,08,08500,08,08,0850000,0850000,0
PC2BYTES10 = อาร์เรย์ใหม่ (0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x10202000,0x102000,0x102020202020202020202020202020202020202020202020202020202020202020
PC2BYTES11 = อาร์เรย์ใหม่ (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x420000,0x500,000,0x200200200200200200200200002000020000200002000020000200002000020000200
PC2BYTES12 = อาร์เรย์ใหม่ (0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x101101000,0x80000,0x80010110,0x8011011011011011011011011011011010
PC2BYTES13 = อาร์เรย์ใหม่ (0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105)
// กี่การวนซ้ำ (1 สำหรับ DES, 3 สำหรับ Triple des)
var iterations = key.length> 8? 3: 1; // เปลี่ยนโดย Paul 16/6/2007 เพื่อใช้ Triple des สำหรับ 9+ ไบต์คีย์
// จัดเก็บปุ่มส่งคืน
var keys = อาร์เรย์ใหม่ (32 * การวนซ้ำ);
// ตอนนี้กำหนดกะซ้ายที่ต้องทำ
var shifts = อาร์เรย์ใหม่ (0, 0, 1, 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 <iterations; 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; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 4);
temp = ((ขวา >>> -16) ^ ซ้าย) & 0x0000ffff; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << -16);
temp = ((ซ้าย >>> 2) ^ ขวา) & 0x333333333; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 2);
temp = ((ขวา >>> -16) ^ ซ้าย) & 0x0000ffff; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << -16);
temp = ((ซ้าย >>> 1) ^ ขวา) & 0x55555555; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 1);
temp = ((ขวา >>> 8) ^ ซ้าย) & 0x00ff00ff; ซ้าย ^= อุณหภูมิ; ขวา ^= (อุณหภูมิ << 8);
temp = ((ซ้าย >>> 1) ^ ขวา) & 0x55555555; ขวา ^= อุณหภูมิ; ซ้าย ^= (อุณหภูมิ << 1);
// ทางด้านขวาจะต้องเปลี่ยนและรับสี่บิตสุดท้ายของด้านซ้าย
temp = (ซ้าย << 8) | ((ขวา >>> 20) & 0x000000f0);
// ซ้ายจะต้องวางคว่ำลง
ซ้าย = (ขวา << 24) | ((ขวา << 8) & 0xff0000) | ((ขวา >>> 8) & 0xff00) | ((ขวา >>> 24) & 0xf0);
ขวา = อุณหภูมิ;
// ตอนนี้ผ่านและดำเนินการกะเหล่านี้ที่ปุ่มซ้ายและขวา
สำหรับ (var i = 0; i <shifts.length; i ++) {
// เลื่อนคีย์ทั้งหนึ่งหรือสองบิตไปทางซ้าย
if (shifts [i]) {left = (ซ้าย << 2) | (ซ้าย >>> 26); ขวา = (ขวา << 2) | (ขวา >>> 26);}
else {left = (ซ้าย << 1) | (ซ้าย >>> 27); ขวา = (ขวา << 1) | (ขวา >>> 27);}
ซ้าย & = -0xf; ขวา & = -0xf;
// ตอนนี้ใช้ PC-2 ในลักษณะที่ E นั้นง่ายกว่าเมื่อเข้ารหัสหรือถอดรหัส
// การแปลงนี้จะดูเหมือน PC-2 ยกเว้นเฉพาะ 6 บิตสุดท้ายของแต่ละไบต์เท่านั้น
// มากกว่า 48 บิตติดต่อกันและลำดับของเส้นจะเป็นไปตาม
// วิธีการเลือก S การเลือกจะถูกนำไปใช้: S2, S4, S6, S8, S1, S3, S5, S7
lefttemp = pc2bytes0 [ซ้าย >>> 28] | PC2BYTES1 [(ซ้าย >>> 24) & 0xF]
- PC2BYTES2 [(ซ้าย >>> 20) & 0xF] | PC2BYTES3 [(ซ้าย >>> 16) & 0xf]
- PC2BYTES4 [(ซ้าย >>> 12) & 0xF] | PC2BYTES5 [(ซ้าย >>> 8) & 0xf]
- PC2BYTES6 [(ซ้าย >>> 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 ^ (อุณหภูมิ << 16);
-
} // สำหรับการวนซ้ำแต่ละครั้ง
// ส่งคืนกุญแจที่เราสร้างขึ้น
กุญแจกลับ;
} // สิ้นสุด des_createkeys
////////////////////////////// ทดสอบ /////////////////// ///////////
ฟังก์ชัน StringtoHex (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];}
Return R;
-
ฟังก์ชั่น 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));}
Return R;
-
var key = "นี่คือคีย์ 24 ไบต์ !!";
var message = "นี่คือข้อความทดสอบ";
var ciphertext = des (คีย์, ข้อความ, 1, 0);
document.writeLn ("การทดสอบ DES:" + StringtoHex (ciphertext));