Dieser Artikel beschreibt die Methode zur Implementierung des SHA-1-Verschlüsselungsalgorithmus in JavaScript. Teilen Sie es für Ihre Referenz. Die spezifische Implementierungsmethode lautet wie folgt:
Rufen Sie einfach die Methode an: hex_sha1.
Kopieren Sie den Code wie folgt:/*
*
* Eine JavaScript-Implementierung des sicheren Hash-Algorithmus SHA-1 wie definiert
* In Fips Pub 180-1
*
* Von Lizq
*
* 2006-11-11
*
*/
/*
*
* Konfigurierbare Variablen.
*
*/
var hexcase = 0; /* Hex -Ausgangsformat. 0 - Kleinbuchstaben; 1 - Großbuchstaben */
var chrsz = 8; /* Bits pro Eingangszeichen. 8 - ASCII; 16 - Unicode */
/*
*
* Die Hauptfunktion zur Berechnung der Nachrichtenverdauung
*
*/
Funktion hex_sha1 (s) {
return binb2hex (core_sha1 (alignsha1 (s)));
}
/*
*
* Führen Sie einen einfachen Selbsttest durch, um festzustellen, ob die VM funktioniert
*
*/
Funktion sha1_vm_test () {
return hex_sha1 ("ABC") == "A9993E364706816ABA3E25717850C26C9CD0D89D";
}
/*
*
* Berechnen Sie die SHA-1 einer Reihe von Wörtern von Big-Endian und ein bisschen Länge
*
*/
Funktion core_sha1 (BlockArray) {
var x = blockArray; // Polsterung anhängen
var w = Array (80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
für (var i = 0; i <x.Length; i += 16) // 512-bit 16*32 Verarbeitung jedes Mal verarbeiten
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var old = e;
für (var j = 0; j <80; j ++) // Führen Sie 80 Schritte für jedes 512 -Bit aus
{
if (j <16)
w [j] = x [i + j];
anders
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);
}
Neue Array zurückgeben (a, b, c, d, e);
}
/*
*
* Führen Sie die entsprechende Triplet -Kombinationsfunktion für den Strom aus
* Iteration
*
* Gibt den Wert der entsprechenden F -Funktion zurück
*
*/
Funktion SHA1_ft (t, b, c, d) {
if (t <20)
return (b & c) | ((~ b) & d);
if (t <40)
Rückkehr b ^ c ^ d;
if (t <60)
return (b & c) | (B & D) | (CD);
Rückkehr b ^ c ^ d; // t <80
}
/*
*
* Bestimmen Sie die entsprechende zusätzliche Konstante für die aktuelle Iteration
*
* Geben Sie den entsprechenden KT -Wert zurück
*
*/
Funktion SHA1_KT (t) {
Rückkehr (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;
}
/*
*
* Ganzzahlen hinzufügen und mit 2^32 umwickeln. Dies verwendet 16-Bit-Operationen intern
*
* In einigen JS -Dolmetschern zu arbeiten.
*
* Teilen Sie die 32-Bit-Zahl in den oberen 16-Bit bzw. den unteren 16-Bit, um die Zugabe von Mod 2^32 zu erkennen
*
*/
Funktion safe_add (x, y) {
var lsw = (x & 0xffff) + (y & 0xfff);
var msw = (x >> 16) + (y >> 16) + (LSW >> 16);
return (msw << 16) | (LSW & 0xffff);
}
/*
*
* Drehen Sie eine 32-Bit-Zahl bitweise nach links.
*
* 32-Bit-Binärzahlenschleife linke Schicht
*
*/
Funktion rol (num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
*
* Der Standard -SHA1 benötigt die Eingangszeichenfolge, um in einen Block zu passen
*
* Diese Funktion richtet die Eingabezeichenfolge so aus, dass die Anforderung erfüllt wird
*
*/
Funktion alignSha1 (str) {
var nblk = ((Str.Length + 8) >> 6) + 1, BLKS = New Array (NBLK * 16);
für (var i = 0; i <nblk * 16; i ++)
BLKS [i] = 0;
für (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;
Rückkehr BLKS;
}
/*
*
* Konvertieren Sie eine Reihe von Wörtern von Big-Endian in eine Sechskantschnur.
*
*/
Funktion Binb2hex (Binarray) {
var hex_tab = hexcase? "0123456789abcdef": "0123456789abcdef";
var str = "";
für (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;
}
/*
*
* Berechnen Sie MessagedIGest nach Quellnachricht, die eingegeben wurde
*
*/
Funktion calcDigest () {
var digestm = hex_sha1 (document.shaform.sourcemessage.Value);
document.shaForm.Messagedigest.Value = digestM;
}
Ich hoffe, dieser Artikel wird für JavaScript -Programme aller hilfreich sein.