Home Web Front-end JS Tutorial Complete example of SHA-1 encryption algorithm implemented in JavaScript_javascript skills

Complete example of SHA-1 encryption algorithm implemented in JavaScript_javascript skills

May 16, 2016 pm 03:16 PM
javascript

The example in this article describes the SHA-1 encryption algorithm implemented in JavaScript. Share it with everyone for your reference, the details are as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

/**

*

* Secure Hash Algorithm (SHA1)

* http://www.webtoolkit.info/

*

**/

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();

}

Copy after login

Readers who are interested in more JavaScript-related content can check out the special topics on this site: "Summary of JavaScript data structure and algorithm techniques" and "Summary of JavaScript mathematical operation usage"

I hope this article will be helpful to everyone in JavaScript programming.

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to implement an online speech recognition system using WebSocket and JavaScript How to implement an online speech recognition system using WebSocket and JavaScript Dec 17, 2023 pm 02:54 PM

How to implement an online speech recognition system using WebSocket and JavaScript

WebSocket and JavaScript: key technologies for implementing real-time monitoring systems WebSocket and JavaScript: key technologies for implementing real-time monitoring systems Dec 17, 2023 pm 05:30 PM

WebSocket and JavaScript: key technologies for implementing real-time monitoring systems

How to implement an online reservation system using WebSocket and JavaScript How to implement an online reservation system using WebSocket and JavaScript Dec 17, 2023 am 09:39 AM

How to implement an online reservation system using WebSocket and JavaScript

How to use JavaScript and WebSocket to implement a real-time online ordering system How to use JavaScript and WebSocket to implement a real-time online ordering system Dec 17, 2023 pm 12:09 PM

How to use JavaScript and WebSocket to implement a real-time online ordering system

JavaScript and WebSocket: Building an efficient real-time weather forecasting system JavaScript and WebSocket: Building an efficient real-time weather forecasting system Dec 17, 2023 pm 05:13 PM

JavaScript and WebSocket: Building an efficient real-time weather forecasting system

Simple JavaScript Tutorial: How to Get HTTP Status Code Simple JavaScript Tutorial: How to Get HTTP Status Code Jan 05, 2024 pm 06:08 PM

Simple JavaScript Tutorial: How to Get HTTP Status Code

How to get HTTP status code in JavaScript the easy way How to get HTTP status code in JavaScript the easy way Jan 05, 2024 pm 01:37 PM

How to get HTTP status code in JavaScript the easy way

How to use insertBefore in javascript How to use insertBefore in javascript Nov 24, 2023 am 11:56 AM

How to use insertBefore in javascript

See all articles