Generate hashes for text and files

Hash text or a file, then compare it with a supplied checksum. Choose the same algorithm; a match alone does not prove the publisher is trustworthy.

HASH WORKSPACE

Generate and compare hashes

Enter text or choose a file; this tool computes the digests in your browser.

In-browser processing 5 algorithms

Hash algorithms

Use the same algorithm as the checksum you are comparing.

Use MD5 and SHA-1 only to compare legacy checksums; do not use them for new signatures or tamper resistance. Do not store passwords with a plain fast hash.
Output case
Ctrl + Enter to generate hashes
Ready to hash in your browser
OUTPUT

Hash results 0

Generate and compare hashes in 3 steps

01

Enter text or choose a file

Text is encoded as UTF-8. Files use their original bytes and must be at most 200 MB; large files need enough browser memory.

Choose an algorithm for comparison

If the file publisher provides a checksum, use the algorithm they specify. Hex length can suggest an algorithm but cannot establish where the checksum came from.

AlgorithmHex lengthUse
MD5 / SHA-132 / 40Compare legacy checksums; avoid in new security designs.
SHA-25664Compare a SHA-256 checksum published by a trusted source.
SHA-384 / SHA-51296 / 128Use when the reference checksum specifies this algorithm.

If a checksum does not match

Different algorithm
Match the algorithm named by the source. Compare only checks the digests you have generated.
Different file or text bytes
Get the exact file again. For text, spaces, line breaks and UTF-8 bytes all affect the digest.
File too large or browser memory error
The file limit is 200 MB. The tool reads the whole file into memory before hashing, so low-memory devices can fail below this limit.

What a hash can and cannot show

A digest is a comparison value, not encryption or a digital signature. A match means your data has the same digest as the pasted checksum; if both file and checksum come from a compromised source, this comparison cannot detect it. Tool code reads input and hashes it in your browser without uploading the file. Do not use MD5, SHA-1 or a plain fast hash for password storage; see OWASP password storage guidance. OWASP.

Comments & feedback

Rate this tool

Loading ratings…

Write a commentNo account needed

Do not share passwords, sensitive information or the contents of files you are processing.

Reviewed before posting. Email stays private.

Embed this tool on your websiteFree · Copy once, receive tool updates automatically

Paste the iframe into HTML, WordPress or any platform that supports embeds. The tool runs in the visitor’s browser; adjust its height and theme as needed.

View the embed guide and supported platforms →

<div style="max-width:900px">
  <iframe data-kitotool-embed src="https://kitotool.com/embed/en/hash-generator/" title="Hash Generator — KitoTool" width="100%" height="1100" style="display:block;width:100%;border:1px solid #dbe3ee;border-radius:12px" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>
  <p style="margin:6px 2px 0;text-align:right;font:12px/1.5 system-ui,sans-serif;color:#64748b">Free tool by <a href="https://kitotool.com/en/hash-generator/" target="_blank" rel="nofollow noopener noreferrer" style="color:#2359d4;text-decoration:underline">KitoTool</a></p>
</div>

The code includes a visible credit below the iframe; its link uses nofollow for a widely distributed widget.

Optional: automatically resize the iframe

Add this script once to the page containing the iframe.

<script>
(function(){var origin="https://kitotool.com";function frames(){return document.querySelectorAll("iframe[data-kitotool-embed]")}function measure(f){if(f.contentWindow&&new URL(f.src).origin===origin)f.contentWindow.postMessage({type:"kitotool:measure"},origin)}window.addEventListener("message",function(e){if(e.origin!==origin||!e.data||e.data.type!=="kitotool:resize"||!Number.isFinite(e.data.height))return;frames().forEach(function(f){if(f.contentWindow===e.source&&new URL(f.src).origin===origin)f.style.height=Math.max(320,Math.min(12000,Math.ceil(e.data.height)))+"px";});});function connect(){frames().forEach(function(f){f.addEventListener("load",function(){measure(f)});measure(f)})}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",connect,{once:true});else connect()})();
</script>