X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2FDigestUtils.java;h=d2092aee02b030ab799e1915fa82db6fe4587f17;hb=fba40295a1ebb9a7e1da5ccf5b1e715843f5f466;hp=2e8560f088ec1dd89c6bedbad7618dc841aaf755;hpb=a5c66ac837e01e447161c3d73fe35eadc26cf304;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/util/DigestUtils.java b/org.argeo.util/src/org/argeo/util/DigestUtils.java index 2e8560f08..d2092aee0 100644 --- a/org.argeo.util/src/org/argeo/util/DigestUtils.java +++ b/org.argeo.util/src/org/argeo/util/DigestUtils.java @@ -29,10 +29,26 @@ import java.security.NoSuchAlgorithmException; /** Utilities around cryptographic digests */ public class DigestUtils { + public final static String MD5 = "MD5"; + public final static String SHA1 = "SHA1"; + public final static String SHA256 = "SHA-256"; + public final static String SHA512 = "SHA-512"; + private static Boolean debug = false; // TODO: make it writable private final static Integer byteBufferCapacity = 100 * 1024;// 100 KB + public static byte[] sha1(byte[] bytes) { + try { + MessageDigest digest = MessageDigest.getInstance(SHA1); + digest.update(bytes); + byte[] checksum = digest.digest(); + return checksum; + } catch (Exception e) { + throw new UtilsException("Cannot SHA1 digest", e); + } + } + public static String digest(String algorithm, byte[] bytes) { try { MessageDigest digest = MessageDigest.getInstance(algorithm); @@ -108,6 +124,15 @@ public class DigestUtils { } } + public static String sha1hex(Path path) { + return digest(SHA1, path, byteBufferCapacity); + } + + public static String digest(String algorithm, Path path, long bufferSize) { + byte[] digest = digestRaw(algorithm, path, bufferSize); + return encodeHexString(digest); + } + public static byte[] digestRaw(String algorithm, Path file, long bufferSize) { long begin = System.currentTimeMillis(); try { @@ -126,7 +151,7 @@ public class DigestUtils { bb = fc.map(MapMode.READ_ONLY, position, bufferSize); position = position + bufferSize; } else { - bb = fc.map(MapMode.READ_ONLY, position, fileSize - bufferSize); + bb = fc.map(MapMode.READ_ONLY, position, fileSize - position); position = fileSize; } md.update(bb); @@ -159,6 +184,7 @@ public class DigestUtils { System.out.println(algorithm + ": " + digest(algorithm, file)); algorithm = "SHA"; System.out.println(algorithm + ": " + digest(algorithm, file)); + System.out.println(algorithm + ": " + sha1hex(file.toPath())); algorithm = "SHA-256"; System.out.println(algorithm + ": " + digest(algorithm, file)); algorithm = "SHA-512";