Artikel ini menjelaskan metode penerapan algoritma enkripsi SHA-1 di JavaScript. Bagikan untuk referensi Anda. Metode implementasi spesifik adalah sebagai berikut:
Metode Panggilan saja: HEX_SHA1.
Salin kode sebagai berikut:/*
*
* Implementasi JavaScript dari algoritma hash aman, SHA-1, sebagaimana didefinisikan
* di fips pub 180-1
*
* Oleh Lizq
*
* 2006-11-11
*
*/
/*
*
* Variabel yang dapat dikonfigurasi.
*
*/
var hexcase = 0; /* format output hex. 0 - huruf kecil; 1 - huruf besar */
var chrsz = 8; /* bit per karakter input. 8 - ASCII; 16 - Unicode */
/*
*
* Fungsi utama untuk menghitung pencernaan pesan
*
*/
fungsi hex_sha1 (s) {
kembalikan binb2hex (core_sha1 (alignsha1 (s)));
}
/*
*
* Lakukan uji diri yang sederhana untuk melihat apakah VM berfungsi
*
*/
fungsi sha1_vm_test () {
return hex_sha1 ("ABC") == "A9993E364706816ABA3E25717850C26C9CD0D89D";
}
/*
*
* Hitung SHA-1 dari serangkaian kata-kata besar-endian, dan sedikit panjang
*
*/
fungsi core_sha1 (blockarray) {
var x = blockarray; // Tambahkan padding
var w = array (80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
untuk (var i = 0; i <x.length; i += 16) // 512-bit 16*32 memproses setiap kali
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;
untuk (var j = 0; j <80; j ++) // Lakukan 80 langkah untuk setiap 512 bit
{
if (j <16)
w [j] = x [i + j];
kalau tidak
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);
}
mengembalikan array baru (a, b, c, d, e);
}
/*
*
* Lakukan fungsi kombinasi triplet yang sesuai untuk arus
* iterasi
*
* Mengembalikan nilai fungsi F yang sesuai
*
*/
fungsi sha1_ft (t, b, c, d) {
if (t <20)
Return (B&C) | ((~ b) & d);
if (t <40)
kembali b ^ c ^ d;
if (t <60)
Return (B&C) | (B&D) | (C&D);
kembali b ^ c ^ d; // t <80
}
/*
*
* Tentukan konstanta tambahan yang sesuai untuk iterasi saat ini
*
* Mengembalikan nilai KT yang sesuai
*
*/
fungsi sha1_kt (t) {
kembali (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;
}
/*
*
* Tambahkan bilangan bulat, membungkus 2^32. Ini menggunakan operasi 16-bit secara internal
*
* Untuk mengatasi bug di beberapa penerjemah JS.
*
* Pisahkan angka 32-bit menjadi 16-bit atas dan masing-masing 16-bit bawah untuk penambahan, sehingga mewujudkan penambahan Mod 2^32
*
*/
fungsi safe_add (x, y) {
var lsw = (x & 0xffff) + (y & 0xfff);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
Return (MSW << 16) | (LSW & 0XFFFF);
}
/*
*
* Bitwise putar nomor 32-bit ke kiri.
*
* 32-bit Binary Number Loop Shift Kiri
*
*/
fungsi rol (num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
*
* Standar SHA1 membutuhkan string input agar masuk ke dalam blok
*
* Fungsi ini menyelaraskan string input untuk memenuhi persyaratan
*
*/
fungsi augnsha1 (str) {
var nblk = ((str.length + 8) >> 6) + 1, blks = array baru (nblk * 16);
untuk (var i = 0; i <nblk * 16; i ++)
Blks [i] = 0;
untuk (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;
mengembalikan blks;
}
/*
*
* Konversi serangkaian kata-kata besar-endian menjadi string hex.
*
*/
fungsi binb2hex (binarray) {
var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF";
var str = "";
untuk (var i = 0; i <binery.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);
}
mengembalikan str;
}
/*
*
* Hitung MessageDigest sesuai dengan pesan sumber yang dimasukkan
*
*/
fungsi calcdigest () {
var digestm = hex_sha1 (document.shaform.sourcemessage.value);
document.shaform.messagedigest.value = digestm;
}
Saya harap artikel ini akan membantu pemrograman JavaScript semua orang.