import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.HexFormat;

public class HashSumber {

    public static void main(String[] args) throws Exception {
        String sumberA = "public class AplikasiGudang { }";
        String sumberB = "public class AplikasiGudang  { }";

        System.out.println("sumber A : " + sumberA);
        System.out.println("hash A   : " + sha256(sumberA));
        System.out.println("hash A   : " + sha256(sumberA) + "  (dihitung ulang)");
        System.out.println();
        System.out.println("sumber B : " + sumberB + "  (satu spasi ekstra)");
        System.out.println("hash B   : " + sha256(sumberB));
        System.out.println();
        System.out.println("input identik menghasilkan hash identik");
        System.out.println("satu karakter berbeda mengubah seluruh hash");
    }

    /** Sidik jari SHA-256 dari sebuah teks sumber. */
    private static String sha256(String teks) throws Exception {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hash = md.digest(teks.getBytes(StandardCharsets.UTF_8));
        return HexFormat.of().formatHex(hash);
    }
}
