/* Get SHA1 by BinaryString */
function GetSHA1ByBinaryString() {
try {
//HTML5 support only
var reader = new FileReader();
var file = document.getElementById("fileupload").files[0];
reader.readAsBinaryString(file);
reader.onloadend = function (evt) {
//Get SHA1
var sha1 = sha_hexdigest(evt.target.result);
document.getElementById("sha1").innerHTML = sha1;
};
} catch (err) {
document.getElementById("sha1").innerHTML = err;
}
}
function sha_hexdigest(bytes) {
var digest = sha_bytes(sha_calculate(sha_ints(bytes), bytes.length * 8));
var digits = '0123456789abcdef';
var hex = '';
for (var i = 0; i < digest.length; i++) {
var c = digest.charCodeAt(i);
hex += digits.charAt((c >> 4) & 0xF) + digits.charAt(c & 0xF);
}
return hex;
}
function sha_ints(bytes) {
while (bytes.length % 4 != 0)
bytes += '\x00';
var ints = new Array();
for (var i = 0; i < bytes.length; i += 4) {
ints[ints.length] = (
(bytes.charCodeAt(i) & 0xFF) << 24 | (bytes.charCodeAt(i + 1) & 0xFF) << 16 | (bytes.charCodeAt(i + 2) & 0xFF) << 8 | (bytes.charCodeAt(i + 3) & 0xFF));
}
return ints;
}
function sha_bytes(ints) {
var bytes = '';
for (var i = 0; i < ints.length; i++)
bytes += String.fromCharCode((ints[i] >> 24) & 0xFF, (ints[i] >> 16) & 0xFF, (ints[i] >> 8) & 0xFF, ints[i] & 0xFF)
return bytes;
}
function sha_calculate(ints, bitn) {
while (ints.length * 32 <= bitn) ints[ints.length] = 0;
ints[ints.length - 1] |= 1 << (31 - bitn % 32)
while (ints.length % 16 != 14) ints[ints.length] = 0;
ints[ints.length] = Math.floor(bitn / 0x100000000);
ints[ints.length] = bitn & 0xFFFFFFFF;
var h0 = 1732584193,
h1 = -271733879,
h2 = -1732584194,
h3 = 271733878,
h4 = -1009589776;
var a, b, c, d, e, f, k, temp, w = new Array(80);
for (var inti = 0; inti < ints.length; inti += 16) {
a = h0;
b = h1;
c = h2;
d = h3;
e = h4;
for (var i = 0; i < 16; i++) w[i] = ints[inti + i];
for (; i < 80; i++) w[i] = sha_rol(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1);
for (var i = 0; i < 80; i++) {
switch (Math.floor(i / 20)) {
case 0:
f = sha_add(1518500249, (b & c) | ((~b) & d));
break;
case 1:
f = sha_add(1859775393, b ^ c ^ d);
break;
case 2:
f = sha_add(-1894007588, (b & c) | (b & d) | (c & d));
break;
case 3:
f = sha_add(-899497514, b ^ c ^ d);
break;
}
temp = sha_add(sha_add(sha_rol(a, 5), w[i]), sha_add(e, f));
e = d;
d = c;
c = b;
b = a;
a = temp;
c = sha_rol(c, 30);
}
h0 = sha_add(h0, a);
h1 = sha_add(h1, b);
h2 = sha_add(h2, c);
h3 = sha_add(h3, d);
h4 = sha_add(h4, e);
}
return new Array(h0, h1, h2, h3, h4);
}
function sha_add(a, b) {
var lsw = (a & 0xFFFF) + (b & 0xFFFF);
var msw = (a >> 16) + (b >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
function sha_rol(n, bits) {
return (n << bits) | (n >>> (32 - bits));
}
<input id="fileupload" type="file" name="fileupload">
<input onclick="javascript: GetSHA1ByBinaryString();" id="check" type="button" value="check SHA1"><div id="sha1"></div>