Este artigo descreve o método de implementação do algoritmo de criptografia SHA-1 em JavaScript. Compartilhe para sua referência. O método de implementação específico é o seguinte:
Basta ligar para o método: hex_sha1.
Copie o código da seguinte forma:/*
*
* Uma implementação JavaScript do algoritmo de hash seguro, SHA-1, conforme definido
* no pub FIPS 180-1
*
* Por Lizq
*
* 2006-11-11
*
*/
/*
*
* Variáveis configuráveis.
*
*/
var hexcase = 0; /* Formato de saída hexadecimal. 0 - minúscula; 1 - maiúsculas */
var Chrsz = 8; /* bits por caractere de entrada. 8 - ASCII; 16 - Unicode */
/*
*
* A principal função para calcular a digestão de mensagens
*
*/
função hex_sha1 (s) {
retornar binb2hex (core_sha1 (alignsha1 (s)));
}
/*
*
* Realize um autoteste simples para ver se a VM está funcionando
*
*/
função sha1_vm_test () {
return hex_sha1 ("abc") == "A9993E364706816ABA3E25717850C26C9CD0D89D";
}
/*
*
* Calcule o sha-1 de uma variedade de palavras grandes e extremas e um pouco de comprimento
*
*/
função core_sha1 (blockArray) {
var x = blockArray; // Anexar preenchimento
var w = matriz (80);
var a = 1732584193;
var B = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
for (var i = 0; i <x.length; i += 16) // 512 bits 16*32 Processando cada vez
{
var OldA = A;
var OldB = B;
var Oldc = C;
var Oldd = D;
var velho = e;
for (var j = 0; j <80; j ++) // executa 80 etapas para cada 512 bits
{
if (j <16)
w [j] = x [i + j];
outro
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 (spear_add (e, w [j]), sha1_kt (j)));
e = d;
d = c;
c = rol (b, 30);
b = a;
a = t;
}
a = safe_add (a, antiga);
b = safe_add (b, OldB);
c = safe_add (c, antigo);
d = safe_add (D, Oldd);
e = safe_add (e, olde);
}
retornar nova matriz (A, B, C, D, E);
}
/*
*
* Execute a função de combinação de trigêmeos apropriada para a corrente
* iteração
*
* Retorna o valor da função f correspondente
*
*/
função sha1_ft (t, b, c, d) {
se (t <20)
Retorno (B&C) | ((~ b) & d);
se (t <40)
retornar b ^ c ^ d;
se (t <60)
Retorno (B&C) | (B&D) | (cd);
retornar b ^ c ^ d; // T <80
}
/*
*
* Determinar a constante adicional apropriada para a iteração atual
*
* Retornar o valor KT correspondente
*
*/
função sha1_kt (t) {
retornar (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;
}
/*
*
* Adicione números inteiros, envolvendo a 2^32. Isso usa operações de 16 bits internamente
*
* Para trabalhar em torno de bugs em alguns intérpretes do JS.
*
* Divida o número de 32 bits nos 16 bits superiores e nos 16 bits inferiores, respectivamente, para adição, percebendo assim a adição de mod 2^32
*
*/
função safe_add (x, y) {
var lsw = (x & 0xffff) + (y & 0xfff);
var msw = (x >> 16) + (y >> 16) + (LSW >> 16);
Retornar (RSU << 16) | (LSW & 0XFFFF);
}
/*
*
* Gire bit gente um número de 32 bits para a esquerda.
*
* Shift de loop de número binário de 32 bits
*
*/
função rol (num, cnt) {
Retornar (num << cnt) | (num >>> (32 - cnt));
}
/*
*
* O SHA1 padrão precisa da sequência de entrada para caber em um bloco
*
* Esta função alinha a sequência de entrada para atender ao requisito
*
*/
função alignsha1 (str) {
var nblk = ((str.length + 8) >> 6) + 1, blks = nova matriz (nblk * 16);
for (var i = 0; i <nblk * 16; i ++)
blks [i] = 0;
para (i = 0; i <str.Length; i ++)
blks [i >> 2] | = str.charcodeat (i) << (24 - (i e 3) * 8);
blks [i >> 2] | = 0x80 << (24 - (i e 3) * 8);
blks [nblk * 16 - 1] = str.length * 8;
retornar blks;
}
/*
*
* Converta uma variedade de palavras grandes endianas em uma corda hexadecimal.
*
*/
função binb2hex (binarray) {
var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF";
var str = "";
for (var i = 0; i <binário.length * 4; i ++) {
str + = hex_tab.charat ((binary [i >> 2] >> ((3 - i % 4) * 8 + 4)) e 0xf) +
hex_tab.charat ((binary [i >> 2] >> ((3 - i % 4) * 8)) e 0xf);
}
retornar str;
}
/*
*
* Calcule Messagedigest de acordo com a mensagem de origem que entrou
*
*/
função calcdigest () {
var digestm = hex_sha1 (document.shaform.sourceMessage.value);
document.shaform.messagedigest.value = Digestm;
}
Espero que este artigo seja útil para a programação JavaScript de todos.