java的md5加密,长度居然会变呀?.微软的就16位或者32位,怎么办?不一样啊我想java跟.net一起都使用,但是加密的长度和内容,有一点不一样,java会长点或者短点,通常是加了0或者减少了0,怎么办办?

解决方案 »

  1.   

    什么16,32位? MD5 HASH 不是128位输出吗?
      

  2.   

    /**
     * 计算文件的MD5
     * @Author Alabaza
     */
    public static String getFileMD5(File file) throws NoSuchAlgorithmException, IOException
        {
            MessageDigest md = MessageDigest.getInstance("MD5");
            FileInputStream fins = new FileInputStream(file);
            DigestInputStream dins = new DigestInputStream(fins,md);
            byte[] buf = new byte[0X1000];
            while(dins.read(buf) != -1)
            {
            }
            dins.close();
            return bytestoHex(dins.getMessageDigest().digest());
        }  public static String bytestoHex(byte[] b)
        {
            String hs = "";
            String stmp = "";
            for (int n = 0; n < b.length; n++)
            {
                stmp = (Integer.toHexString(b[n] & 0XFF));
                if (stmp.length() == 1)
                    hs = hs + "0" + stmp;
                else
                    hs = hs + stmp;
            }
            return hs.toUpperCase();
        }
      

  3.   

    这个更好..
    public static String encodeMD5(String text) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(text.getBytes());
        byte[] digest = md.digest();
        StringBuffer md5 = new StringBuffer();
        for (int i = 0; i < digest.length; i++) {
            md5.append(Character.forDigit((digest[i] & 0xF0) >> 4, 16));
            md5.append(Character.forDigit((digest[i] & 0xF), 16));
        }
        return md5.toString();
    }