- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-21-2018 11:41 AM
Does anyone know a way to generate SHA256 Hash for a given Sting ?
Say my String is "ABC"
and my Key is "KEY"
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-11-2019 07:52 AM
So, I finally got it.
SHA256 is a hashing algorithm. So there is no KEY involved, and SHA256 is not an encryption algorithm but its a hashing algorithm.
The below script include will do the trick:
var SHA256Hashing = Class.create();
SHA256Hashing.prototype =
{
initialize: function()
{
var chrsz = 8;
var hexcase = 0;
},
SHA256:function(s)
{
var chrsz = 8;
var hexcase = 0;
s = this.Utf8Encode(s);
return this.binb2hex(this.core_sha256(this.str2binb(s), s.length * chrsz));
},
safe_add:function (x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
},
S :function(X, n) { return ( X >>> n ) | (X << (32 - n)); },
R :function(X, n) { return ( X >>> n ); },
Ch:function(x, y, z) { return ((x & y) ^ ((~x) & z)); },
Maj:function(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); },
Sigma0256:function(x) { return (this.S(x, 2) ^ this.S(x, 13) ^ this.S(x, 22)); },
Sigma1256:function(x) { return (this.S(x, 6) ^ this.S(x, 11) ^ this.S(x, 25)); },
Gamma0256:function(x) { return (this.S(x, 7) ^ this.S(x, 18) ^ this.R(x, 3)); },
Gamma1256:function(x) { return (this.S(x, 17) ^ this.S(x, 19) ^ this.R(x, 10)); },
core_sha256 :function(m, l)
{
var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
var W = new Array(64);
var a, b, c, d, e, f, g, h, i, j;
var T1, T2;
m[l >> 5] |= 0x80 << (24 - l % 32);
m[((l + 64 >> 9) << 4) + 15] = l;
for ( var i = 0; i<m.length; i+=16 )
{
a = HASH[0];
b = HASH[1];
c = HASH[2];
d = HASH[3];
e = HASH[4];
f = HASH[5];
g = HASH[6];
h = HASH[7];
for ( var j = 0; j<64; j++)
{
if (j < 16) W[j] = m[j + i];
else W[j] = this.safe_add(this.safe_add(this.safe_add(this.Gamma1256(W[j - 2]), W[j - 7]), this.Gamma0256(W[j - 15])), W[j - 16]);
T1 = this.safe_add(this.safe_add(this.safe_add(this.safe_add(h, this.Sigma1256(e)), this.Ch(e, f, g)), K[j]), W[j]);
T2 = this.safe_add(this.Sigma0256(a), this.Maj(a, b, c));
h = g;
g = f;
f = e;
e = this.safe_add(d, T1);
d = c;
c = b;
b = a;
a = this.safe_add(T1, T2);
}
HASH[0] = this.safe_add(a, HASH[0]);
HASH[1] = this.safe_add(b, HASH[1]);
HASH[2] = this.safe_add(c, HASH[2]);
HASH[3] = this.safe_add(d, HASH[3]);
HASH[4] = this.safe_add(e, HASH[4]);
HASH[5] = this.safe_add(f, HASH[5]);
HASH[6] = this.safe_add(g, HASH[6]);
HASH[7] = this.safe_add(h, HASH[7]);
}
return HASH;
},
str2binb :function(str)
{
var chrsz = 8;
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
{
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
}
return bin;
},
Utf8Encode:function(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;
},
binb2hex :function(binarray)
{
var hexcase = 0;
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.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);
}
return str;
}
};
Usage :
var sha256Obj = new SHA256Hashing();
var stringToBeHashed = "hash me";
var hash = sha256Obj.SHA256(stringToBeHashed);
gs.print(hash);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-22-2018 09:02 PM
Hello,
You can Load CRYPTO JS library as script include and then get SHA256 key
Note: Please mark reply as correct if it answers your question
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-27-2018 09:24 PM
Deepak, I read the thread. I tried some experiments, Could you please post how to use the CryptoJS Library ?
the thread talks about getting JWT tokens, but not specifically about a simple SHA256 function.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-27-2018 09:54 PM
Hello Aman,
I am not sure if this works for you and SHA 256 whats it used for just trying to add some helpful links
https://www.youtube.com/watch?v=mbekM2ErHfM
https://www.youtube.com/watch?v=DMtFhACPnTY
Mark this response as correct if that really helps so that it would be helpful for someone looking for the same
Thanks,
Siva
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-11-2019 07:52 AM
So, I finally got it.
SHA256 is a hashing algorithm. So there is no KEY involved, and SHA256 is not an encryption algorithm but its a hashing algorithm.
The below script include will do the trick:
var SHA256Hashing = Class.create();
SHA256Hashing.prototype =
{
initialize: function()
{
var chrsz = 8;
var hexcase = 0;
},
SHA256:function(s)
{
var chrsz = 8;
var hexcase = 0;
s = this.Utf8Encode(s);
return this.binb2hex(this.core_sha256(this.str2binb(s), s.length * chrsz));
},
safe_add:function (x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
},
S :function(X, n) { return ( X >>> n ) | (X << (32 - n)); },
R :function(X, n) { return ( X >>> n ); },
Ch:function(x, y, z) { return ((x & y) ^ ((~x) & z)); },
Maj:function(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); },
Sigma0256:function(x) { return (this.S(x, 2) ^ this.S(x, 13) ^ this.S(x, 22)); },
Sigma1256:function(x) { return (this.S(x, 6) ^ this.S(x, 11) ^ this.S(x, 25)); },
Gamma0256:function(x) { return (this.S(x, 7) ^ this.S(x, 18) ^ this.R(x, 3)); },
Gamma1256:function(x) { return (this.S(x, 17) ^ this.S(x, 19) ^ this.R(x, 10)); },
core_sha256 :function(m, l)
{
var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
var W = new Array(64);
var a, b, c, d, e, f, g, h, i, j;
var T1, T2;
m[l >> 5] |= 0x80 << (24 - l % 32);
m[((l + 64 >> 9) << 4) + 15] = l;
for ( var i = 0; i<m.length; i+=16 )
{
a = HASH[0];
b = HASH[1];
c = HASH[2];
d = HASH[3];
e = HASH[4];
f = HASH[5];
g = HASH[6];
h = HASH[7];
for ( var j = 0; j<64; j++)
{
if (j < 16) W[j] = m[j + i];
else W[j] = this.safe_add(this.safe_add(this.safe_add(this.Gamma1256(W[j - 2]), W[j - 7]), this.Gamma0256(W[j - 15])), W[j - 16]);
T1 = this.safe_add(this.safe_add(this.safe_add(this.safe_add(h, this.Sigma1256(e)), this.Ch(e, f, g)), K[j]), W[j]);
T2 = this.safe_add(this.Sigma0256(a), this.Maj(a, b, c));
h = g;
g = f;
f = e;
e = this.safe_add(d, T1);
d = c;
c = b;
b = a;
a = this.safe_add(T1, T2);
}
HASH[0] = this.safe_add(a, HASH[0]);
HASH[1] = this.safe_add(b, HASH[1]);
HASH[2] = this.safe_add(c, HASH[2]);
HASH[3] = this.safe_add(d, HASH[3]);
HASH[4] = this.safe_add(e, HASH[4]);
HASH[5] = this.safe_add(f, HASH[5]);
HASH[6] = this.safe_add(g, HASH[6]);
HASH[7] = this.safe_add(h, HASH[7]);
}
return HASH;
},
str2binb :function(str)
{
var chrsz = 8;
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
{
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
}
return bin;
},
Utf8Encode:function(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;
},
binb2hex :function(binarray)
{
var hexcase = 0;
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.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);
}
return str;
}
};
Usage :
var sha256Obj = new SHA256Hashing();
var stringToBeHashed = "hash me";
var hash = sha256Obj.SHA256(stringToBeHashed);
gs.print(hash);