關於php MD5加密 與java MD5 加密結果不一致的問題


針對PHP不是UTF-8編碼導致的問題

public String md5(String txt) {
             try{
                  MessageDigest md = MessageDigest.getInstance("MD5");
                  md.update(txt.getBytes("GBK"));    //問題主要出在這里,Java的字符串是unicode編碼,不受源碼文件的編碼影響;而PHP的編碼是和源碼文件的編碼一致,受源碼編碼影響。
                  StringBuffer buf=new StringBuffer();            
                  for(byte b:md.digest()){
                       buf.append(String.format("%02x", b&0xff));        
                  }
                 return  buf.toString();
               }catch( Exception e ){
                   e.printStackTrace(); 

                   return null;
                }
        }

 

或者直接使用PHP加密出來提供給JAVA使用

      1、搭建好php的環境(不作介紹),寫一個通過提取get參數,並對值進行md5加密的頁面,如下

   <?php echo strtoupper(md5($_GET["md5str"])); ?>

   strtoupper是字母大寫轉換的函數

   md5是MD5加密的函數

   $_GET["md5str"]就是通過url帶一個md5str的參數,把值獲取並打印出來

 

      2、JAVA頁面的提交方法

     /**
     * 用於做PHP的提交處理
     * @param url
     */
    public static String phpRequest(String url){
        try{
            HttpClient client = new HttpClient();
            PostMethod post = new PostMethod(url);//使用POST方式提交數據
            post.setRequestHeader("Content-Type","text/html; charset=UTF-8");
            client.executeMethod(post);
            String response = new String(post.getResponseBodyAsString().getBytes("8859_1"), "UTF-8");//打印結果頁面
            post.releaseConnection();
            return response;
        } catch(IOException e){
            e.printStackTrace();
            return null;
        }
    }

需要提示的是,url記得先對中文參數進行一次UTF-8的編碼再傳到這個方法里面,這個方法對響應的結果做了反編碼的處理,最后就能正確的返回php MD5加密后的值了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM