MessageDigest md = MessageDigest.getInstance("MD5");
md.update(buff);
byte[] result = md.digest();再将这个result每字节tohex就可以了

解决方案 »

  1.   

    java.security.MessageDigest.getInstance("MD5").digest(byte[]/*文件内容*/)
      

  2.   

    上面说得我知道,可是,我用下面的语句并不行。
    FileInputStream inp = new FileInputStream(new File(fileName));
    md.update(inp);如何,将文件的内容放到update()中呢?
    谢谢各位了
      

  3.   

    byte[] content=new byte[inp.available()];
    inp.readFully(content);
    byte[] result=md5.digest(content);
      

  4.   

    谢谢,可以了。
    public static void main(String[] args) {
    byte cResult[] = new byte[16];
            String sResult = "";
            try {
             String fileName = "c:/arcldr.exe";
             FileInputStream inp = new FileInputStream(new File(fileName));
    BufferedReader in = new BufferedReader(new FileReader(fileName));

                MessageDigest md = MessageDigest.getInstance("MD5");
                
                byte[] content=new byte[inp.available()];
                inp.read(content);
                md.update(content);
                cResult = md.digest();            for (int i = 0; i < cResult.length; i++) {
                    if (cResult[i] < 0)
                        cResult[i] += 128;
                    String sTemp = Integer.toHexString(cResult[i]).toUpperCase();
                    if (cResult[i] < 16)
                        sTemp = "0" + sTemp;
                    sResult += sTemp;
                }
            }
            catch (Exception e) {
                sResult = "";
            }
            System.out.println(sResult);
      

  5.   

    我把你这个程序运行了一下,对同一程序得到的值跟 
    WinMd5 V1.0 得到的值不一样啊.
    你的:  2B4C7F55203C1F2C631223692C14732C
    WinMd5:2b4cffd5a0bc1f2ce31223692c14f32c
      

  6.   

    这一段的问题
    for   (int   i   =   0;   i   <   cResult.length;   i++)   { 
         if   (cResult[i]   <   0) 
              cResult[i]   +=   128; 
         String   sTemp   =   Integer.toHexString(cResult[i]).toUpperCase(); 
         if   (cResult[i]   <   16) 
              sTemp   =   "0 "   +   sTemp; 
         sResult   +=   sTemp; 

    用这个方法把byte转十六进制就OK了.
        /**
         * byte转换为十六进制
          * @param b byte
         * @return String
         */
        public static String byte2Hex(byte b) {
            return ("" + "0123456789ABCDEF".charAt(0xf & b >> 4) +
                    "0123456789ABCDEF".charAt(b & 0xf));
        }