В этой статье описывается метод реализации алгоритма шифрования SHA-1 в JavaScript. Поделитесь этим для вашей ссылки. Конкретный метод реализации следующим образом:
Просто позвоните по методу: hex_sha1.
Скопируйте код следующим образом:/*
*
* Реализация JavaScript Алгоритма безопасного хэша SHA-1, как определено
* В пабе FIPS 180-1
*
* Лизк
*
* 2006-11-11
*
*/
/*
*
* Настраиваемые переменные.
*
*/
var hexcase = 0; /* Выходной формат шестигранного. 0 - нижний регистр; 1 - верхний регистр */
var chrsz = 8; /* Биты на входной символ. 8 - ASCII; 16 - Unicode */
/*
*
* Основная функция для расчета сообщений дайджест
*
*/
функция hex_sha1 (s) {
вернуть binb2Hex (core_sha1 (alignsha1 (s)));
}
/*
*
* Выполните простой самопроверка, чтобы увидеть, работает ли виртуальная машина
*
*/
function sha1_vm_test () {
вернуть 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-бит 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 бит
{
if (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);
}
/*
*
* Выполните соответствующую функцию комбинации триплета для текущего
* Итерация
*
* Возвращает значение соответствующей функции F
*
*/
function sha1_ft (t, b, c, d) {
if (t <20)
Возврат (B & C) | ((~ b) & d);
if (t <40)
возврат b ^ c ^ d;
if (t <60)
Возврат (B & C) | (B & D) | (C & D);
возврат b ^ c ^ d; // t <80
}
/*
*
* Определите соответствующую дополнительную константу для текущей итерации
*
* Вернуть соответствующее значение KT
*
*/
function sha1_kt (t) {
Возврат (t <20)? 1518500249: (T <40)? 1859775393: (T <60)? -1894007588: -899497514;
}
/*
*
* Добавьте целые числа, упаковка на 2^32. Это использует 16-битные операции внутри
*
* Работать вокруг ошибок в некоторых переводчиках JS.
*
* Разделите 32-битное число на верхний 16-битный и нижний 16-битный соответственно для добавления, тем самым реализуя добавление мод 2^32
*
*/
function safe_add (x, y) {
var lsw = (x & 0xffff) + (y & 0xfff);
var msw = (x >> 16) + (y >> 16) + (LSW >> 16);
return (msw << 16) | (LSW & 0xffff);
}
/*
*
* Поверните 32-битный номер влево.
*
* 32-битная бинарная петля левой смены левой
*
*/
функция rol (num, cnt) {
return (num << cnt) | (NUM >>> (32 - CNT));
}
/*
*
* Стандартному SHA1 нужна входная строка, чтобы вписаться в блок
*
* Эта функция выравнивает входную строку, чтобы удовлетворить требование
*
*/
Функция alignsha1 (str) {
var nblk = ((str.length + 8) >> 6) + 1, blks = new Array (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;
вернуть BLK;
}
/*
*
* Преобразовать массив больших слов в шестнадцатеричную строку.
*
*/
функция binb2Hex (binarray) {
var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF";
var str = "";
for (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);
}
вернуть Str;
}
/*
*
* Рассчитайте MessageDigest в соответствии с исходным сообщением, которое введено
*
*/
функция SACLEDIGEST () {
var Digestm = hex_sha1 (document.shaform.sourcemessage.value);
document.shaform.messagedigest.value = digestm;
}
Я надеюсь, что эта статья будет полезна для каждого программирования JavaScript.