java自带的MessageDigest实现文本的md5加密算法
本篇使用java自带的MessageDigest实现对文本的md5加密算法,具体代码如下:
/**
*@Description:将字符串转化为MD5
*/
packagecn.yicha.novel.util;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
publicclassParseMD5{
/**
*@paramstr
*@return
*@Description:32位小写MD5
*/
publicstaticStringparseStrToMd5L32(Stringstr){
StringreStr=null;
try{
MessageDigestmd5=MessageDigest.getInstance("MD5");
byte[]bytes=md5.digest(str.getBytes());
StringBufferstringBuffer=newStringBuffer();
for(byteb:bytes){
intbt=b&0xff;
if(bt<16){
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
reStr=stringBuffer.toString();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
returnreStr;
}
/**
*@paramstr
*@return
*@Description:32位大写MD5
*/
publicstaticStringparseStrToMd5U32(Stringstr){
StringreStr=parseStrToMd5L32(str);
if(reStr!=null){
reStr=reStr.toUpperCase();
}
returnreStr;
}
/**
*@paramstr
*@return
*@Description:16位小写MD5
*/
publicstaticStringparseStrToMd5U16(Stringstr){
StringreStr=parseStrToMd5L32(str);
if(reStr!=null){
reStr=reStr.toUpperCase().substring(8,24);
}
returnreStr;
}
/**
*@paramstr
*@return
*@Description:16位大写MD5
*/
publicstaticStringparseStrToMd5L16(Stringstr){
StringreStr=parseStrToMd5L32(str);
if(reStr!=null){
reStr=reStr.substring(8,24);
}
returnreStr;
}
}
第二种情况:在进行Java软件开发过程中,难免会对一些数据进行加密,因此Java中提供了自带的MessageDigest实现对文本的加密算法,下面是一个对文本进行加密的MD5加密工具类代码示例:
Java中的MD5加密算法完整版:
packagenet.yuerwan.commons.util;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importorg.apache.commons.lang.StringUtils;
publicclassMD5Util{
/**
*1.对文本进行32位小写MD5加密
*@paramplainText要进行加密的文本
*@return加密后的内容
*/
publicstaticStringtextToMD5L32(StringplainText){
Stringresult=null;
//首先判断是否为空
if(StringUtils.isBlank(plainText)){
returnnull;
}
try{
//首先进行实例化和初始化
MessageDigestmd=MessageDigest.getInstance("MD5");
//得到一个操作系统默认的字节编码格式的字节数组
byte[]btInput=plainText.getBytes();
//对得到的字节数组进行处理
md.update(btInput);
//进行哈希计算并返回结果
byte[]btResult=md.digest();
//进行哈希计算后得到的数据的长度
StringBuffersb=newStringBuffer();
for(byteb:btResult){
intbt=b&0xff;
if(bt<16){
sb.append(0);
}
sb.append(Integer.toHexString(bt));
}
result=sb.toString();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
returnresult;
}
/**
*2.对文本进行32位MD5大写加密
*@paramplainText要进行加密的文本
*@return加密后的内容
*/
publicstaticStringtextToMD5U32(StringplainText){
if(StringUtils.isBlank(plainText)){
returnnull;
}
Stringresult=textToMD5L32(plainText);
returnresult.toUpperCase();
}
第三种情况:MD5加密算法的java实现
packageother;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
/*
*MD5算法
*/
publicclassMD5{
//全局数组
privatefinalstaticString[]strDigits={"0","1","2","3","4","5",
"6","7","8","9","a","b","c","d","e","f"};
publicMD5(){
}
//返回形式为数字跟字符串
privatestaticStringbyteToArrayString(bytebByte){
intiRet=bByte;
//System.out.println("iRet="+iRet);
if(iRet<0){
iRet+=256;
}
intiD1=iRet/16;
intiD2=iRet%16;
returnstrDigits[iD1]+strDigits[iD2];
}
//返回形式只为数字
privatestaticStringbyteToNum(bytebByte){
intiRet=bByte;
System.out.println("iRet1="+iRet);
if(iRet<0){
iRet+=256;
}
returnString.valueOf(iRet);
}
//转换字节数组为16进制字串
privatestaticStringbyteToString(byte[]bByte){
StringBuffersBuffer=newStringBuffer();
for(inti=0;i<bByte.length;i++){
sBuffer.append(byteToArrayString(bByte[i]));
}
returnsBuffer.toString();
}
publicstaticStringGetMD5Code(StringstrObj){
StringresultString=null;
try{
resultString=newString(strObj);
MessageDigestmd=MessageDigest.getInstance("MD5");
//md.digest()该函数返回值为存放哈希值结果的byte数组
resultString=byteToString(md.digest(strObj.getBytes()));
}catch(NoSuchAlgorithmExceptionex){
ex.printStackTrace();
}
returnresultString;
}
publicstaticvoidmain(String[]args){
MD5getMD5=newMD5();
System.out.println(getMD5.GetMD5Code("000000"));
}
}