C#的算法应该是微软实现的,不能看到源码,就是一句话
 public static string md5(string str)
    {
        string md5str = FormsAuthentication.HashPasswordForStoringInConfigFile(str.Trim().Replace("'", ""), "MD5");
        return md5str;
    }请问使用java如何实现。之前用java实现的结果:
69AAC51ED3FA8D84E9D6B9A37A4A523(使用了大写)
但是c#实现的结果:
69AAC51ED3FA08D84E9D6B9A37A4A523
就是差一个0呀,害得我访问接口老是说参数错,求各位大神能解答!

解决方案 »

  1.   


    public static String md5(String src) throws Exception{
      MessageDigest md=MessageDigest.getInstance("MD5");
      byte[] b=src.getBytes();
      md.update(b);
      b=md.digest();
      StringBuilder sb=new StringBuilder();
      for(int i=0;i<b.length;i++){
         int value=b[i]&0xff;//留下后面的8位2进制数
         if(value<16)//小于16的要补0因为字节时候用16进制的表现形式
    sb.append("0");
         sb.append(Integer.toHexString(value));//转换成16进制数
      }
      return sb.toString();
    }
      

  2.   

    是现成的,但是,你必须要写成和别人c#的webservice服务器一样的呀,以服务器为准!其实,也慢简单的.
     public static String getMD5(String str, String encoding) throws Exception {    
         MessageDigest md = MessageDigest.getInstance("MD5");     
         md.update(str.getBytes(encoding));    
         byte[] result = md.digest();    
         StringBuffer sb = new StringBuffer(32);    
         for (int i = 0; i < result.length; i++){        
         int val = result[i] & 0xff;         
         if (val < 0xf) {           
         sb.append("0");   
         }         
         sb.append(Integer.toHexString(val));   
         }     
         return sb.toString().toUpperCase(); 
        }
      

  3.   

    字符编码问题
    public static void main(String[] args) throws Exception {
        System.out.println(getMD5("a", "utf-8"));
    }
     
    public static String getMD5(String str, String encoding) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes(encoding));
        byte[] result = md.digest();
        StringBuffer sb = new StringBuffer(32);
        for (int i = 0; i < result.length; i++) {
            int val = result[i] & 0xff;
            if (val < 0xf) {
                sb.append("0");
            }
            sb.append(Integer.toHexString(val));
        }
        return sb.toString().toUpperCase();
    }