/_octopress/source/functions/sha1/index.markdown
https://gitlab.com/orvi2014/phpjs · Markdown · 180 lines · 153 code · 27 blank · 0 comment · 0 complexity · 38e75515162c59878a74ee14749cc95e MD5 · raw file
- ---
- layout: page
- title: "JavaScript sha1 function"
- comments: true
- sharing: true
- footer: true
- alias:
- - /functions/view/sha1:512
- - /functions/view/sha1
- - /functions/view/512
- - /functions/sha1:512
- - /functions/512
- ---
- <!-- Generated by Rakefile:build -->
- A JavaScript equivalent of PHP's sha1
- {% codeblock strings/sha1.js lang:js https://raw.github.com/kvz/phpjs/master/functions/strings/sha1.js raw on github %}
- function sha1(str) {
- // discuss at: http://phpjs.org/functions/sha1/
- // original by: Webtoolkit.info (http://www.webtoolkit.info/)
- // improved by: Michael White (http://getsprink.com)
- // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // input by: Brett Zamir (http://brett-zamir.me)
- // depends on: utf8_encode
- // example 1: sha1('Kevin van Zonneveld');
- // returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'
- var rotate_left = function(n, s) {
- var t4 = (n << s) | (n >>> (32 - s));
- return t4;
- };
- /*var lsb_hex = function (val) { // Not in use; needed?
- 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;
- };*/
- var cvt_hex = function(val) {
- var str = '';
- var i;
- var v;
- for (i = 7; i >= 0; i--) {
- v = (val >>> (i * 4)) & 0x0f;
- str += v.toString(16);
- }
- return str;
- };
- 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;
- str = this.utf8_encode(str);
- var str_len = str.length;
- var word_array = [];
- for (i = 0; i < str_len - 3; i += 4) {
- j = str.charCodeAt(i) << 24 | str.charCodeAt(i + 1) << 16 | str.charCodeAt(i + 2) << 8 | str.charCodeAt(i + 3);
- word_array.push(j);
- }
- switch (str_len % 4) {
- case 0:
- i = 0x080000000;
- break;
- case 1:
- i = str.charCodeAt(str_len - 1) << 24 | 0x0800000;
- break;
- case 2:
- i = str.charCodeAt(str_len - 2) << 24 | str.charCodeAt(str_len - 1) << 16 | 0x08000;
- break;
- case 3:
- i = str.charCodeAt(str_len - 3) << 24 | str.charCodeAt(str_len - 2) << 16 | str.charCodeAt(str_len - 1) <<
- 8 | 0x80;
- break;
- }
- word_array.push(i);
- while ((word_array.length % 16) != 14) {
- word_array.push(0);
- }
- word_array.push(str_len >>> 29);
- word_array.push((str_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;
- }
- temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);
- return temp.toLowerCase();
- }
- {% endcodeblock %}
- - [Raw function on GitHub](https://github.com/kvz/phpjs/blob/master/functions/strings/sha1.js)
- Please note that php.js uses JavaScript objects as substitutes for PHP arrays, they are
- the closest match to this hashtable-like data structure.
- Please also note that php.js offers community built functions and goes by the
- [McDonald's Theory](https://medium.com/what-i-learned-building/9216e1c9da7d). We'll put online
- functions that are far from perfect, in the hopes to spark better contributions.
- Do you have one? Then please just:
- - [Edit on GitHub](https://github.com/kvz/phpjs/edit/master/functions/strings/sha1.js)
- ### Other PHP functions in the strings extension
- {% render_partial _includes/custom/strings.html %}