public static void main(String arg[]){
String  myinfo="我的测试信息";  
 
MessageDigest alg = null;
try {
alg = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}  
alg.update(myinfo.getBytes());  
    byte[]  digesta=alg.digest();  
    System.out.println(digesta);
}执行好控制台打出:[B@bc8e1e
[B@bc8e1e 不是MD5吧。
MD5不是32或16位的吗?

解决方案 »

  1.   

    不知这样调用的你是不是有要UUID啊 UUID.randomUUID()才是32位的
      

  2.   

    你需要将 byte转换为16进制的,获取到的byte[]是16位,转换为10进制后是16*2,也就是32位了
      

  3.   

    UUID出来是
    9ebab2a5-ad38-4e2e-8f97-0e6ce7526d05
    这种效果,
    MD5加密过的事没有-的
      

  4.   


    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    public class Test {
    public static void main(String arg[]) {
    String myinfo = "我的测试信息";
    MessageDigest alg = null;
    try {
    alg = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    }
    alg.update(myinfo.getBytes());
    byte[] digesta = alg.digest();
    System.out.println(digesta);
    System.out.println(Test.byte2Hex(digesta));
    } static String byte2Hex(byte[] paramArrayOfByte) {
    StringBuffer localStringBuffer = new StringBuffer();
    String str = "";
    for (int i = 0; i < paramArrayOfByte.length; ++i) {
    str = Integer.toHexString(paramArrayOfByte[i] & 0xFF);
    if (str.length() == 1)
    localStringBuffer.append("0");
    localStringBuffer.append(str);
    }
    return localStringBuffer.toString().toUpperCase();
    }
    }
      

  5.   

    好像Arrays也有类似转string的方法