2016-08-12 67 views
1

我有一個PHP函數。此代碼是加密密碼用於PHP pack()函數的Java等效函數

是否有人知道如何在Java代碼中編寫此代碼。

這是我試過但不給我結果。

byte[] rawSHA = null; 
    byte[] base64HexSHA = null; 
    MessageDigest md= null; 

    try { 
     md = MessageDigest.getInstance("MD5"); 
    } catch (NoSuchAlgorithmException e) { 
     LOG.error("Unable to load MD5 Message Digest : " + e.getMessage(), e); 
     throw new IllegalStateException("MD5 Message Digest Instance Not Found"); 
    } 


    rawSHA = md.digest(rawText.getBytes("UTF-8")); 
    base64HexSHA = Base64.encodeBase64(rawSHA); 
    System.out.println("result = "+base64HexSHA); 

感謝您的幫助

編輯: 我用這個的base64庫

import org.apache.tomcat.util.codec.binary.Base64; 
+3

- 請詳細說明。你嘗試了什麼,你期望什麼,你得到了什麼?還請定義您使用的是哪個'Base64'類,因爲有幾個庫提供了它。它看起來不像'java.util.Base64'。 – Thomas

回答

0

我已經解決了這一點。這可能有助於其他。

String ps="tes"; 
    MessageDigest md = MessageDigest.getInstance("MD5"); 
    byte[] encryptedPassword = md.digest(ps.getBytes()); 
    byte[] encodedBytes = Base64.encodeBase64(encryptedPassword); 
    String Str2 = new String(encodedBytes); 

給我一個結果: 「但不要給我結果」

before =tes 
after :KLZi2IO212/Zbk3cXpungA 
0
String someString = "qwe"; 
MessageDigest messageDigest = MessageDigest.getInstance("MD5"); 
String checksum = new BigInteger(1, messageDigest.digest(someString.getBytes())).toString(16); 
System.out.println(checksum); 

希望這有助於.. :)

+0

我嘗試輸入= [12345abc]。這個結果是:從你的代碼[185aef3b1c810799a6be8314abf6512c],從上面的php函數[GFrvOxyBB5mmvoMUq/ZRLA] – amor

+0

'185aef3b1c810799a6be8314abf6512c'的值是正確的MD5輸入'12345abc'。你正在比較outout與MD%或你的方法'md5_base64($ txt)'的返回值? – zombie

+0

是的,這是正確的MD5加密。但上面的php函數不僅僅是將輸入文本加密成MD5加密。裏面有一個替換字符串和pack函數 – amor