给大家分享一个JavaScript的SHA1(哈希算法)

//SHA1加密算法

function SHA1(msg) {

function rotate_left(n, s) {

var t4 = (n << s ) | (n >>> (32 – s));

return t4;

};

function lsb_hex(val) {

var str = “”;

var i;

var vh;

var vl;

for ( i = 0; i <= 6; i += 2) {

vh = (val >>> (i * 4 + 4)) & 0x0f;

vl = (val >>> (i * 4)) & 0x0f;

str += vh.toString(16) + vl.toString(16);

}

return str;

};

function cvt_hex(val) {

var str = “”;

var i;

var v;

for ( i = 7; i >= 0; i–) {

v = (val >>> (i * 4)) & 0x0f;

str += v.toString(16);

}

return str;

};

function Utf8Encode(string) {

string = string.replace(/\r\n/g, “\n”);

var utftext = “”;

for (var n = 0; n < string.length; n++) {

var c = string.charCodeAt(n);

if (c < 128) {

utftext += String.fromCharCode(c);

} else if ((c > 127) && (c < 2048)) {

utftext += String.fromCharCode((c >> 6) | 192);

utftext += String.fromCharCode((c & 63) | 128);

} else {

utftext += String.fromCharCode((c >> 12) | 224);

utftext += String.fromCharCode(((c >> 6) & 63) | 128);

utftext += String.fromCharCode((c & 63) | 128);

}

}

return utftext;

};

var blockstart;

var i, j;

var W = new Array(80);

var H0 = 0x67452301;

var H1 = 0xEFCDAB89;

var H2 = 0x98BADCFE;

var H3 = 0x10325476;

var H4 = 0xC3D2E1F0;

var A, B, C, D, E;

var temp;

msg = Utf8Encode(msg);

var msg_len = msg.length;

var word_array = new Array();

for ( i = 0; i < msg_len – 3; i += 4) {

j = msg.charCodeAt(i) << 24 | msg.charCodeAt(i + 1) << 16 | msg.charCodeAt(i + 2) << 8 | msg.charCodeAt(i + 3);

word_array.push(j);

}

switch (msg_len % 4) {

case 0:

i = 0x080000000;

break;

case 1:

i = msg.charCodeAt(msg_len – 1) << 24 | 0x0800000;

break;

case 2:

i = msg.charCodeAt(msg_len – 2) << 24 | msg.charCodeAt(msg_len – 1) << 16 | 0x08000;

break;

case 3:

i = msg.charCodeAt(msg_len – 3) << 24 | msg.charCodeAt(msg_len – 2) << 16 | msg.charCodeAt(msg_len – 1) << 8 | 0x80;

break;

}

word_array.push(i);

while ((word_array.length % 16) != 14)

word_array.push(0);

word_array.push(msg_len >>> 29);

word_array.push((msg_len << 3) & 0x0ffffffff);

for ( blockstart = 0; blockstart < word_array.length; blockstart += 16) {

for ( i = 0; i < 16; i++)

W[i] = word_array[blockstart + i];

for ( i = 16; i <= 79; i++)

W[i] = rotate_left(W[i – 3] ^ W[i – 8] ^ W[i – 14] ^ W[i – 16], 1);

A = H0;

B = H1;

C = H2;

D = H3;

E = H4;

for ( i = 0; i <= 19; i++) {

temp = (rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;

E = D;

D = C;

C = rotate_left(B, 30);

B = A;

A = temp;

}

for ( i = 20; i <= 39; i++) {

temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;

E = D;

D = C;

C = rotate_left(B, 30);

B = A;

A = temp;

}

for ( i = 40; i <= 59; i++) {

temp = (rotate_left(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;

E = D;

D = C;

C = rotate_left(B, 30);

B = A;

A = temp;

}

for ( i = 60; i <= 79; i++) {

temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;

E = D;

D = C;

C = rotate_left(B, 30);

B = A;

A = temp;

}

H0 = (H0 + A) & 0x0ffffffff;

H1 = (H1 + B) & 0x0ffffffff;

H2 = (H2 + C) & 0x0ffffffff;

H3 = (H3 + D) & 0x0ffffffff;

H4 = (H4 + E) & 0x0ffffffff;

}

var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

return temp.toLowerCase();

}

    原文作者:哈希算法
    原文地址: https://blog.csdn.net/u011011217/article/details/52489893
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞