package droidkit.crypto;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author Daniel Serdyukov
*/
public class Digest {
public static final String MD5 = "MD5";
public static final String SHA1 = "SHA-1";
public static final String SHA256 = "SHA-256";
public static Digest getInstance() {
return Holder.INSTANCE;
}
@NonNull
public byte[] hash(@NonNull byte[] data, @Nullable String algorithm) throws DigestException {
String localAlgorithm = algorithm;
if (TextUtils.isEmpty(localAlgorithm)) {
localAlgorithm = SHA1;
}
try {
final MessageDigest hash = MessageDigest.getInstance(localAlgorithm);
hash.update(data);
return hash.digest();
} catch (NoSuchAlgorithmException e) {
throw new DigestException(e);
}
}
@NonNull
public String hashString(@NonNull String data, @Nullable String algorithm) throws DigestException {
return Hex.toHexString(hash(data.getBytes(Hex.UTF_8), algorithm));
}
private static final class Holder {
public static final Digest INSTANCE = new Digest();
}
}