-
-
Save oldpatricka/3b28fce4c9230dcb61da to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
</head> | |
<body> | |
hi ian. Hash of "Message" is: | |
<span id="hash"></span> | |
</body> | |
<head> | |
<script type="text/javascript"> | |
var CryptoJS = CryptoJS || function(h, s) { | |
var f = {}, t = f.lib = {}, g = function() {}, j = t.Base = { | |
extend: function(a) { | |
g.prototype = this; | |
var c = new g; | |
a && c.mixIn(a); | |
c.hasOwnProperty("init") || (c.init = function() { | |
c.$super.init.apply(this, arguments) | |
}); | |
c.init.prototype = c; | |
c.$super = this; | |
return c | |
}, | |
create: function() { | |
var a = this.extend(); | |
a.init.apply(a, arguments); | |
return a | |
}, | |
init: function() {}, | |
mixIn: function(a) { | |
for (var c in a) | |
a.hasOwnProperty(c) && (this[c] = a[c]); | |
a.hasOwnProperty("toString") && (this.toString = a.toString) | |
}, | |
clone: function() { | |
return this.init.prototype.extend(this) | |
} | |
}, | |
q = t.WordArray = j.extend({ | |
init: function(a, c) { | |
a = this.words = a || []; | |
this.sigBytes = c != s ? c : 4 * a.length | |
}, | |
toString: function(a) { | |
return (a || u).stringify(this) | |
}, | |
concat: function(a) { | |
var c = this.words, d = a.words, b = this.sigBytes; | |
a = a.sigBytes; | |
this.clamp(); | |
if (b%4) | |
for (var e = 0; e < a; e++) | |
c[b + e>>>2]|=(d[e>>>2]>>>24 - 8 * (e%4) & 255)<<24 - 8 * ((b + e)%4); | |
else if (65535 < d.length) | |
for (e = 0; e < a; e += 4) | |
c[b + e>>>2] = d[e>>>2]; | |
else | |
c.push.apply(c, d); | |
this.sigBytes += a; | |
return this | |
}, | |
clamp: function() { | |
var a = this.words, c = this.sigBytes; | |
a[c>>>2]&=4294967295<< | |
32 - 8 * (c%4); | |
a.length = h.ceil(c / 4) | |
}, | |
clone: function() { | |
var a = j.clone.call(this); | |
a.words = this.words.slice(0); | |
return a | |
}, | |
random: function(a) { | |
for (var c = [], d = 0; d < a; d += 4) | |
c.push(4294967296 * h.random() | 0); | |
return new q.init(c, a) | |
} | |
}), v = f.enc = {}, u = v.Hex = { | |
stringify: function(a) { | |
var c = a.words; | |
a = a.sigBytes; | |
for (var d = [], b = 0; b < a; b++) { | |
var e = c[b>>>2]>>>24 - 8 * (b%4) & 255; | |
d.push((e>>>4).toString(16)); | |
d.push((e & 15).toString(16)) | |
} | |
return d.join("") | |
}, | |
parse: function(a) { | |
for (var c = a.length, d = [], b = 0; b < c; b += 2) | |
d[b>>>3]|=parseInt(a.substr(b, | |
2), 16)<<24 - 4 * (b%8); | |
return new q.init(d, c / 2) | |
} | |
}, k = v.Latin1 = { | |
stringify: function(a) { | |
var c = a.words; | |
a = a.sigBytes; | |
for (var d = [], b = 0; b < a; b++) | |
d.push(String.fromCharCode(c[b>>>2]>>>24 - 8 * (b%4) & 255)); | |
return d.join("") | |
}, | |
parse: function(a) { | |
for (var c = a.length, d = [], b = 0; b < c; b++) | |
d[b>>>2]|=(a.charCodeAt(b) & 255)<<24 - 8 * (b%4); | |
return new q.init(d, c) | |
} | |
}, l = v.Utf8 = { | |
stringify: function(a) { | |
try { | |
return decodeURIComponent(escape(k.stringify(a))) | |
} catch (c) { | |
throw Error("Malformed UTF-8 data"); | |
} | |
}, | |
parse: function(a) { | |
return k.parse(unescape(encodeURIComponent(a))) | |
} | |
}, | |
x = t.BufferedBlockAlgorithm = j.extend({ | |
reset: function() { | |
this._data = new q.init; | |
this._nDataBytes = 0 | |
}, | |
_append: function(a) { | |
"string" == typeof a && (a = l.parse(a)); | |
this._data.concat(a); | |
this._nDataBytes += a.sigBytes | |
}, | |
_process: function(a) { | |
var c = this._data, d = c.words, b = c.sigBytes, e = this.blockSize, f = b / (4 * e), f = a ? h.ceil(f): h.max((f | 0) - this._minBufferSize, 0); | |
a = f * e; | |
b = h.min(4 * a, b); | |
if (a) { | |
for (var m = 0; m < a; m += e) | |
this._doProcessBlock(d, m); | |
m = d.splice(0, a); | |
c.sigBytes -= b | |
} | |
return new q.init(m, b) | |
}, | |
clone: function() { | |
var a = j.clone.call(this); | |
a._data = this._data.clone(); | |
return a | |
}, | |
_minBufferSize: 0 | |
}); | |
t.Hasher = x.extend({ | |
cfg: j.extend(), | |
init: function(a) { | |
this.cfg = this.cfg.extend(a); | |
this.reset() | |
}, | |
reset: function() { | |
x.reset.call(this); | |
this._doReset() | |
}, | |
update: function(a) { | |
this._append(a); | |
this._process(); | |
return this | |
}, | |
finalize: function(a) { | |
a && this._append(a); | |
return this._doFinalize() | |
}, | |
blockSize: 16, | |
_createHelper: function(a) { | |
return function(c, d) { | |
return (new a.init(d)).finalize(c) | |
} | |
}, | |
_createHmacHelper: function(a) { | |
return function(c, d) { | |
return (new w.HMAC.init(a, | |
d)).finalize(c) | |
} | |
} | |
}); | |
var w = f.algo = {}; | |
return f | |
}(Math); | |
(function(h) { | |
for (var s = CryptoJS, f = s.lib, t = f.WordArray, g = f.Hasher, f = s.algo, j = [], q = [], v = function(a) { | |
return 4294967296 * (a - (a | 0)) | 0 | |
}, u = 2, k = 0; 64 > k;) { | |
var l; | |
a: | |
{ | |
l = u; | |
for (var x = h.sqrt(l), w = 2; w <= x; w++) | |
if (!(l%w)) { | |
l=!1; | |
break a | |
} | |
l=!0 | |
} | |
l && (8 > k && (j[k] = v(h.pow(u, 0.5))), q[k] = v(h.pow(u, 1 / 3)), k++); | |
u++ | |
} | |
var a = [], f = f.SHA256 = g.extend({ | |
_doReset: function() { | |
this._hash = new t.init(j.slice(0)) | |
}, | |
_doProcessBlock: function(c, d) { | |
for (var b = this._hash.words, e = b[0], f = b[1], m = b[2], h = b[3], p = b[4], j = b[5], k = b[6], l = b[7], n = 0; 64 > n; n++) { | |
if (16 > n) | |
a[n] = | |
c[d + n] | 0; | |
else { | |
var r = a[n - 15], g = a[n - 2]; | |
a[n] = ((r<<25 | r>>>7)^(r<<14 | r>>>18)^r>>>3) + a[n - 7] + ((g<<15 | g>>>17)^(g<<13 | g>>>19)^g>>>10) + a[n - 16] | |
} | |
r = l + ((p<<26 | p>>>6)^(p<<21 | p>>>11)^(p<<7 | p>>>25)) + (p & j^~p & k) + q[n] + a[n]; | |
g = ((e<<30 | e>>>2)^(e<<19 | e>>>13)^(e<<10 | e>>>22)) + (e & f^e & m^f & m); | |
l = k; | |
k = j; | |
j = p; | |
p = h + r | 0; | |
h = m; | |
m = f; | |
f = e; | |
e = r + g | 0 | |
} | |
b[0] = b[0] + e | 0; | |
b[1] = b[1] + f | 0; | |
b[2] = b[2] + m | 0; | |
b[3] = b[3] + h | 0; | |
b[4] = b[4] + p | 0; | |
b[5] = b[5] + j | 0; | |
b[6] = b[6] + k | 0; | |
b[7] = b[7] + l | 0 | |
}, | |
_doFinalize: function() { | |
var a = this._data, d = a.words, b = 8 * this._nDataBytes, e = 8 * a.sigBytes; | |
d[e>>>5]|=128<<24 - e%32; | |
d[(e + 64>>>9<<4) + 14] = h.floor(b / 4294967296); | |
d[(e + 64>>>9<<4) + 15] = b; | |
a.sigBytes = 4 * d.length; | |
this._process(); | |
return this._hash | |
}, | |
clone: function() { | |
var a = g.clone.call(this); | |
a._hash = this._hash.clone(); | |
return a | |
} | |
}); | |
s.SHA256 = g._createHelper(f); | |
s.HmacSHA256 = g._createHmacHelper(f) | |
})(Math); | |
var hash = CryptoJS.SHA256("Message"); | |
document.getElementById("hash").innerHTML = hash; | |
</script> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment