Minecraft anticheat guide
Verifying Plugin Downloads and Checksums for Minecraft Servers
Check a Minecraft plugin jar against its published SHA-256 hash, inspect plugin.yml, pin versions, and record each file before it reaches production.
Answer: compare the SHA-256 hash with the publisher's value
Verify a plugin download by computing its SHA-256 hash and comparing it with the value the publisher posted for that exact version. A match shows the file is the one the publisher released. It does not prove the publisher is trustworthy, so buy and download from the official source first, then check the hash. Record the hash with the version in your change log.
Get the expected hash from the publisher
Open the publisher's download page or release notes for the exact version you plan to deploy. Copy the SHA-256 value. If the publisher does not post hashes, ask for one before deployment and write down the answer.
Compute the hash on the server
Run the command from the server root, against the jar in the plugins folder. Replace the placeholders with your plugin name and version.
# Linux server, run from the server root
sha256sum plugins/<PluginName>-<version>.jar
# macOS alternative
shasum -a 256 plugins/<PluginName>-<version>.jarDecide what the result means
A hash check has four possible outcomes. Each one needs a different next step, and none of them should be skipped.
| Result | Meaning | Next step |
|---|---|---|
| Hashes match | The file matches the publisher's release for that version | Continue to the jar inspection steps |
| Hashes differ | The file changed, was corrupted in transfer, or is a different build | Re-download once from the official source, then stop if it still differs |
| No published hash | You cannot show the file matches a release | Ask the publisher. Do not deploy an unverified build to production |
| Hash matches a copy from a forum or chat | The file matches that copy, not necessarily the publisher's release | Treat the source as unknown and verify against the official page |
Inspect the jar before it loads
A matching hash confirms the file, but you still need to confirm what the file says it is. These checks take a few minutes and catch a wrong jar or a mismatched build early.
# List the top-level entries of the jar
unzip -l plugins/<PluginName>-<version>.jar | head -n 20
# Print the plugin descriptor
unzip -p plugins/<PluginName>-<version>.jar plugin.ymlPin versions and record every file
Pin each plugin to one version. Turn off automatic updates in any tool that replaces jars for you. A pinned version lets you reproduce an alert or an appeal later, because you know exactly which build produced it.
What the hash does not prove
A checksum proves that two files match. It does not prove the plugin has no bugs, and it does not prove the publisher's site was never compromised. If an attacker controls the download page, they can post a matching bad hash. Check the hash against the seller's listing as well as the developer page, and watch for differences between them.
Also remember that a verified jar can still be configured badly. Verification and configuration review are separate steps.
The hash also says nothing about your config files. Those change independently of the jar, so track them through your change log and review process rather than through the publisher.
What we have not verified
We have not confirmed that every vendor publishes SHA-256 hashes, and this page does not assume they do. We have not tested the commands on every operating system or hosting panel. Confirm the command output on your own host before you write it into a runbook.
FAQ
Is MD5 enough for plugin verification?
Use SHA-256 when the publisher offers it. Compare against the exact algorithm the publisher lists, and do not compare an MD5 value with a SHA-256 value. If only MD5 is published, ask the publisher for SHA-256 before deployment.
The hash matches but the plugin fails to load. What now?
A match only confirms the file. Check plugin.yml, the api-version, and the server log for the first error. A load failure usually points to a version or dependency mismatch rather than a bad download.
Do I need to recompute the hash after a server restart?
Not after a normal restart, as long as the jar file has not changed. Recompute it after any copy, move, server migration, or restore, because those steps can change which bytes end up in the folder.
Can I automate the comparison?
Yes. A script that compares the local hash with a value you copied from the publisher page works well for repeat deployments. Keep the expected values in a file you review, and do not fetch them from the same host as the jar.