2 Replies Latest reply on Feb 24, 2017 3:26 AM by mflassak RSS
    mflassak Newbie

    Creating a SHA1 Hash

    Hi all,

     

    short question for a beginner:

     

    Is it possible to create a SHA1 hash from a string inside a thingworx service script? I will need it to be able to connect to a thing which sends a token and I have to add password as SHA1 string...

     

    Thanks.

      • Re: Creating a SHA1 Hash
        horia.raducioiu Apprentice

        Hi Martin, I believe there are 2 ways to solve this problem, you can :

        a ) Use AJAX to call your back-end page and retrieve the hash

        b )  Use one of the Javascript libraries such as CryptoJS or http://www.movable-type.co.uk/scripts/sha1.html

         

        Let me know if this helps.

        -Horia.

          • Re: Creating a SHA1 Hash
            mflassak Newbie

            Hi Horia,

             

            with help from PTC I was able to create a local JavaScript Service (variable "i) which does the work without adding additional libraries:

             

             

            //  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)
            //  example 1: sha1('Kevin van Zonneveld');
            //  returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'

            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;
            };

            function SHA1(stringToHash) {
                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;
                var encodedInput
                stringToHash = Utf8Encode(stringToHash);
                var input_len = stringToHash.length;
                var word_array = new Array();
                for( i=0; i<input_len-3; i+=4 ) {
                    j = stringToHash.charCodeAt(i)<<24 | stringToHash.charCodeAt(i+1)<<16 |
                        stringToHash.charCodeAt(i+2)<<8 | stringToHash.charCodeAt(i+3);
                    word_array.push( j );
                }
                switch( input_len % 4 ) {
                    case 0:
                        i = 0x080000000;
                        break;
                    case 1:
                        i = stringToHash.charCodeAt(input_len-1)<<24 | 0x0800000;
                        break;
                    case 2:
                        i = stringToHash.charCodeAt(input_len-2)<<24 | stringToHash.charCodeAt(input_len-1)<<16 | 0x08000;
                        break;
                    case 3:
                        i = stringToHash.charCodeAt(input_len-3)<<24 | stringToHash.charCodeAt(input_len-2)<<16 | stringToHash.charCodeAt(input_len-1)<<8  | 0x80;
                        break;
                }
                word_array.push( i );
                while( (word_array.length % 16) != 14 ) word_array.push( 0 );
                word_array.push( input_len>>>29 );
                word_array.push( (input_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();
               
            }
            var result = SHA1(input);