X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2FDigestUtils.java;h=ce018007c6c637dce08d0c563e80d27a16c575cc;hb=72788789268d2ac01dcb817d134c057307ba6de8;hp=83538167a4dd4c73ffae439a6d17c90b9fe5c07c;hpb=e299bf6123fb27d14176d2a164a85971be40fa2a;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 83538167a..ce018007c 100644 --- a/org.argeo.util/src/org/argeo/util/DigestUtils.java +++ b/org.argeo.util/src/org/argeo/util/DigestUtils.java @@ -1,18 +1,3 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.util; import java.io.File; @@ -29,18 +14,23 @@ 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 + // TODO: make it configurable private final static Integer byteBufferCapacity = 100 * 1024;// 100 KB public static byte[] sha1(byte[] bytes) { try { - MessageDigest digest = MessageDigest.getInstance("SHA1"); + MessageDigest digest = MessageDigest.getInstance(SHA1); digest.update(bytes); byte[] checksum = digest.digest(); return checksum; - } catch (Exception e) { - throw new UtilsException("Cannot SHA1 digest", e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException(e); } } @@ -51,8 +41,8 @@ public class DigestUtils { byte[] checksum = digest.digest(); String res = encodeHexString(checksum); return res; - } catch (Exception e) { - throw new UtilsException("Cannot digest with algorithm " + algorithm, e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException("Cannot digest with algorithm " + algorithm, e); } } @@ -72,8 +62,10 @@ public class DigestUtils { byte[] checksum = digest.digest(); String res = encodeHexString(checksum); return res; - } catch (Exception e) { - throw new UtilsException("Cannot digest with algorithm " + algorithm, e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException("Cannot digest with algorithm " + algorithm, e); + } catch (IOException e) { + throw new RuntimeException(e); } finally { StreamUtils.closeQuietly(in); } @@ -91,7 +83,7 @@ public class DigestUtils { ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz); return digest(algorithm, bb); } catch (IOException e) { - throw new UtilsException("Cannot digest " + file + " with algorithm " + algorithm, e); + throw new IllegalArgumentException("Cannot digest " + file + " with algorithm " + algorithm, e); } finally { StreamUtils.closeQuietly(fis); if (fc.isOpen()) @@ -115,10 +107,19 @@ public class DigestUtils { System.out.println((end - begin) + " ms / " + ((end - begin) / 1000) + " s"); return res; } catch (NoSuchAlgorithmException e) { - throw new UtilsException("Cannot digest with algorithm " + algorithm, e); + throw new IllegalArgumentException("Cannot digest with algorithm " + algorithm, e); } } + 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 { @@ -137,7 +138,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); @@ -147,8 +148,10 @@ public class DigestUtils { if (debug) System.out.println((end - begin) + " ms / " + ((end - begin) / 1000) + " s"); return md.digest(); - } catch (Exception e) { - throw new UtilsException("Cannot digest " + file + " with algorithm " + algorithm, e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException("Cannot digest " + file + " with algorithm " + algorithm, e); + } catch (IOException e) { + throw new RuntimeException("Cannot digest " + file + " with algorithm " + algorithm, e); } } @@ -170,6 +173,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";