java使用MessageDigest信息摘要算法,md5、sha-1、sha-256
使用算法-枚举
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* 消息摘要算法
*
* @version v1.0
* @date 2021/12/14
*/
public enum MsgDigestEnum {
/** 消息摘要算法 md5*/MD5("MD5"),
/** 消息摘要算法 SHA-1*/SHA_1("SHA-1"),
/** 消息摘要算法 SHA-256*/SHA_256("SHA-256"),
;
private final String digest;
MsgDigestEnum(String digest){
this.digest = digest;
}
public String getDigest() {
return digest;
}
public String crypt(String val,String salt){
return new BigInteger(1,cryptB(this,val,salt)).toString(16);
}
public String crypt(String val){
return to16Str(cryptB(this,val,null));
}
public static byte[] cryptB(MsgDigestEnum digest,String val,String salt){
MessageDigest msgDig = toDigest(digest.digest);
msgDig.update(val.getBytes(StandardCharsets.UTF_8));
if( null != salt && salt.length() > 0 ){
msgDig.update(salt.getBytes(StandardCharsets.UTF_8));
}
//MessageDigest调用digest()方法之后 输入的摘要将被重置,意思就是之后需要再加密的话 可以直接使用之前已有的对象
return msgDig.digest();
}
private static String to16Str(byte[] bytes){
// 可以改为常量
char[] hexCh = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int l = bytes.length;
char[] buf = new char[l*2];
for (int i = 0,k = 0; i < l; i++) {
byte b = bytes[i];
buf[k++] = hexCh[b >>> 4 & 0xf];
buf[k++] = hexCh[b & 0xf];
}
return new String(buf);
}
private static MessageDigest toDigest(String digest){
try {
return MessageDigest.getInstance(digest);
} catch (NoSuchAlgorithmException e) {
throw new IllegalArgumentException(e);
}
}
}
测试代码

输出


该博客介绍了如何在Java中使用MessageDigest类实现MD5、SHA-1和SHA-256三种信息摘要算法。提供了一个枚举MsgDigestEnum用于封装加密方法,并提供了加密字符串的辅助方法。测试代码展示了如何使用这些算法对字符串进行加密。
1586

被折叠的 条评论
为什么被折叠?



