บทความนี้อธิบายวิธีการใช้อัลกอริทึมการเข้ารหัส SHA-1 ใน JavaScript แบ่งปันสำหรับการอ้างอิงของคุณ วิธีการใช้งานเฉพาะมีดังนี้:
เพียงแค่วิธีการโทร: hex_sha1
คัดลอกรหัสดังนี้:/*
-
* การใช้งาน JavaScript ของอัลกอริทึม Hash Secure, SHA-1 ตามที่กำหนดไว้
* ใน FIPS PUB 180-1
-
* โดย lizq
-
* 2006-11-11
-
-
-
-
* ตัวแปรที่กำหนดค่าได้
-
-
var hexcase = 0; /* รูปแบบเอาต์พุต hex 0 - ตัวพิมพ์เล็ก; 1 - ตัวพิมพ์ใหญ่ */
var chrsz = 8; /* บิตต่ออักขระอินพุต 8 - ASCII; 16 - Unicode */
-
-
* ฟังก์ชั่นหลักในการคำนวณ Message Digest
-
-
ฟังก์ชั่น hex_sha1 (s) {
ส่งคืน binb2hex (core_sha1 (Alignsha1 (s)));
-
-
-
* ทำการทดสอบตัวเองอย่างง่ายเพื่อดูว่า VM ทำงานได้หรือไม่
-
-
ฟังก์ชั่น sha1_vm_test () {
return hex_sha1 ("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
-
-
-
* คำนวณ sha-1 ของอาเรย์ของคำใหญ่-เอดินและความยาวเล็กน้อย
-
-
ฟังก์ชั่น core_sha1 (blockarray) {
var x = blockarray; // ผนวกช่องว่าง
var w = อาร์เรย์ (80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
สำหรับ (var i = 0; i <x.length; i += 16) // 512-bit 16*32 การประมวลผลในแต่ละครั้ง
-
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;
สำหรับ (var j = 0; j <80; j ++) // ดำเนินการ 80 ขั้นตอนสำหรับแต่ละ 512 บิต
-
ถ้า (j <16)
w [j] = x [i + j];
อื่น
W [J] = ROL (W [J - 3] ^ W [J - 8] ^ W [J - 14] ^ W [J - 16], 1);
var t = safe_add (safe_add (rol (a, 5), sha1_ft (j, b, c, d)), safe_add (safe_add (e, w [j]), sha1_kt (j)));
e = d;
d = c;
C = ROL (B, 30);
b = a;
a = t;
-
a = safe_add (a, olda);
b = safe_add (b, oldb);
c = safe_add (c, oldc);
d = safe_add (d, oldd);
e = safe_add (e, olde);
-
คืนอาร์เรย์ใหม่ (A, B, C, D, E);
-
-
-
* ทำฟังก์ชั่นการรวมกันของ Triplet ที่เหมาะสมสำหรับปัจจุบัน
* การวนซ้ำ
-
* ส่งคืนค่าของฟังก์ชัน F ที่สอดคล้องกัน
-
-
ฟังก์ชั่น sha1_ft (t, b, c, d) {
ถ้า (t <20)
return (b & c) | ((~ b) & d);
ถ้า (t <40)
กลับ b ^ c ^ d;
ถ้า (t <60)
return (b & c) | (B&D) | (ซีดี);
กลับ b ^ c ^ d; // t <80
-
-
-
* กำหนดค่าคงที่เพิ่มเติมที่เหมาะสมสำหรับการวนซ้ำในปัจจุบัน
-
* ส่งคืนค่า KT ที่เกี่ยวข้อง
-
-
ฟังก์ชั่น sha1_kt (t) {
return (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;
-
-
-
* เพิ่มจำนวนเต็ม, ห่อที่ 2^32 สิ่งนี้ใช้การดำเนินการ 16 บิตภายใน
-
* เพื่อแก้ไขข้อบกพร่องในล่าม JS บางตัว
-
* แบ่งหมายเลข 32 บิตเป็น 16 บิตบนและ 16 บิตต่ำกว่าตามลำดับสำหรับการเพิ่มดังนั้นจึงตระหนักถึงการเพิ่ม mod 2^32
-
-
ฟังก์ชั่น safe_add (x, y) {
var lsw = (x & 0xffff) + (y & 0xfff);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (LSW & 0xffff);
-
-
-
* Bitwise หมุนหมายเลข 32 บิตไปทางซ้าย
-
* เลขฐานไบนารี 32 บิต
-
-
ฟังก์ชัน ROL (num, cnt) {
return (num << cnt) | (num >>> (32 - CNT));
-
-
-
* SHA1 มาตรฐานต้องการสตริงอินพุตให้พอดีกับบล็อก
-
* ฟังก์ชั่นนี้จัดเรียงสตริงอินพุตเพื่อตอบสนองความต้องการ
-
-
ฟังก์ชั่น ALIGNSHA1 (STR) {
var nblk = ((str.length + 8) >> 6) + 1, blks = อาร์เรย์ใหม่ (nblk * 16);
สำหรับ (var i = 0; i <nblk * 16; i ++)
blks [i] = 0;
สำหรับ (i = 0; i <str.length; i ++)
blks [i >> 2] | = str.charcodeat (i) << (24 - (i & 3) * 8);
blks [i >> 2] | = 0x80 << (24 - (i & 3) * 8);
blks [nblk * 16 - 1] = str.length * 8;
กลับ blks;
-
-
-
* แปลงอาร์เรย์ของคำใหญ่-เอดินเป็นสตริง hex
-
-
ฟังก์ชั่น binb2hex (binarray) {
var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF";
var str = "";
สำหรับ (var i = 0; i <binary.length * 4; i ++) {
str + = hex_tab.charat ((binarray [i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xf) +
hex_tab.charat ((binarray [i >> 2] >> ((3 - i % 4) * 8)) & 0xf);
-
return str;
-
-
-
* คำนวณ messageGeSest ตามข้อความต้นทางที่ป้อนเข้า
-
-
ฟังก์ชั่น calcdigest () {
var digestm = hex_sha1 (document.shaform.sourceMessage.value);
document.shaform.messagedigest.value = digestm;
-
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม JavaScript ของทุกคน