/* 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>