我从网上DOWN了一个得到MD5的类
import java.security.*;
import java.math.*;
public class TestMd5
{
public String MD5(String sInput) throws Exception{
String algorithm="";
//输入不能为空
if(sInput.trim()==null){
return "null";
}
//指定采用MD5算法
try{
algorithm=System.getProperty("MD5.algorithm","MD5");
}catch(SecurityException se){
}
//定义MessageDigest对象
MessageDigest md=MessageDigest.getInstance(algorithm);
//按照系统缺省的字符编码方式把sInput 转换成字节,并把结果存到一新的字节数组buffer中
byte buffer[]=sInput.getBytes();
//从指定的字节数组buffer的偏移量0开始,用指定的字节数组修改由sInput生成摘要
//count为从 0 开始用的字节数长度。
for(int count=0;count<sInput.length();count++)
{
md.update(buffer,0,count);
}
//通过执行最后的诸如填充的操作完成散列码的计算。 在调用之后复位该摘要
//返回存放结果散列值的字节数组bDigest
byte bDigest[]=md.digest();
//将bDigest转换为大整数bi
BigInteger bi=new BigInteger(bDigest);
//返回bi字符串表示,即最终的编码结果
return(bi.toString(16));
} public static void main(String [] a)
{
TestMd5 my = new TestMd5();
try
{
System.out.println(my.MD5("abc"));
//50f260602273676bfc60ab35352d8d40 //111
//-19da6a11674a7aeac2537831e54963c4 //abc
}catch (Exception e){}
}
}
请问大家,是不是MD5值肯定是32位的?但是这个程序有时候得到33位的值,害我数据老是插入错误,数据自段我已经设为char(32)了
import java.security.*;
import java.math.*;
public class TestMd5
{
public String MD5(String sInput) throws Exception{
String algorithm="";
//输入不能为空
if(sInput.trim()==null){
return "null";
}
//指定采用MD5算法
try{
algorithm=System.getProperty("MD5.algorithm","MD5");
}catch(SecurityException se){
}
//定义MessageDigest对象
MessageDigest md=MessageDigest.getInstance(algorithm);
//按照系统缺省的字符编码方式把sInput 转换成字节,并把结果存到一新的字节数组buffer中
byte buffer[]=sInput.getBytes();
//从指定的字节数组buffer的偏移量0开始,用指定的字节数组修改由sInput生成摘要
//count为从 0 开始用的字节数长度。
for(int count=0;count<sInput.length();count++)
{
md.update(buffer,0,count);
}
//通过执行最后的诸如填充的操作完成散列码的计算。 在调用之后复位该摘要
//返回存放结果散列值的字节数组bDigest
byte bDigest[]=md.digest();
//将bDigest转换为大整数bi
BigInteger bi=new BigInteger(bDigest);
//返回bi字符串表示,即最终的编码结果
return(bi.toString(16));
} public static void main(String [] a)
{
TestMd5 my = new TestMd5();
try
{
System.out.println(my.MD5("abc"));
//50f260602273676bfc60ab35352d8d40 //111
//-19da6a11674a7aeac2537831e54963c4 //abc
}catch (Exception e){}
}
}
请问大家,是不是MD5值肯定是32位的?但是这个程序有时候得到33位的值,害我数据老是插入错误,数据自段我已经设为char(32)了
没有实质性的接触过
关注ing
public static String MD5digest(String text)
throws Exception
{
if (md == null)
{
md = MessageDigest.getInstance("MD5");
} String rs = "";
if (md == null)
{
Exception ex = new Exception("MessageDigest is not created!");
throw ex;
}
md.update(text.getBytes("UTF8"));
byte bs[] = md.digest();
for (int n = 0; n < bs.length; n++)
{
rs += Integer.toHexString( (0x000000ff & bs[n]) | 0xffffff00).substring(6);
}
return rs;
}