package ch.unibe.scg.cc; import static com.google.common.base.Preconditions.checkNotNull; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.inject.Inject; import com.google.common.base.Charsets; /** Performs no normalization. Simply computes the cryptographic hash of a string */ public class StandardHasher implements Hasher { final private static long serialVersionUID = 1L; /** Package private so that ShingleHasher can learn num of bytes. */ transient MessageDigest md = makeDigest(); @Inject StandardHasher() {} private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); md = makeDigest(); } @Override public byte[] hash(String document) { checkNotNull(document); return md.digest(document.getBytes(Charsets.UTF_8)); } private static MessageDigest makeDigest() { try { return MessageDigest.getInstance("SHA1"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("Couldn't find SHA1 digest. ", e); } } }