2010-11-15 20 views
7

मैं इस पर घंटों तक काम कर रहा हूं, लेकिन मैं इसे काम नहीं कर सकता।जावा एमडी 5, PHP रास्ता

मूल रूप से मैं PHP में एक आरईएसटी सर्वर के लिए जावा में एक आरईएसटी क्लाइंट विकसित कर रहा हूं। क्लाइंट और सर्वर दोनों को एक स्ट्रिंग के md5 की गणना करना है और सर्वर उन्हें प्रमाणीकरण (kinda) के लिए तुलना करेगा।

सर्वर पर, PHP कोड है:

md5("getTokenapi_keybf8ddfs845jhre980543jhsjfro93fd8capi_ver1tokeniud9ER£jdfff"); 

कि उत्पन्न करता है:

4d7b2e42c3dfd11de3e77b9fe2211b87 

अच्छा!

import java.security.*; 
.... 
String s = "getTokenapi_keybf8ddfs845jhre980543jhsjfro93fd8capi_ver1tokeniud9ER£jdfff"; 
byte[] bytesOfMessage = s.getBytes("UTF-8"); 
MessageDigest md = MessageDigest.getInstance("MD5"); 
byte[] thedigest = md.digest(bytesOfMessage);  

System.out.println("String2: " + thedigest);   
System.out.println("String3: " + new String(thedigest)); 

उत्पन्न करता है कि:

String2: [[email protected] 
String3: M{.B�����{��!� 

मैं कैसे जावा गणना करने के लिए md5 उसी तरह पीएचपी करता है योग प्राप्त कर सकते हैं, कृपया

यहाँ ग्राहक के लिए कोड है?

धन्यवाद, दान

उत्तर

20

इस आजमाएँ:

public static String md5(String input) throws NoSuchAlgorithmException { 
    String result = input; 
    if(input != null) { 
     MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1" 
     md.update(input.getBytes()); 
     BigInteger hash = new BigInteger(1, md.digest()); 
     result = hash.toString(16); 
     while(result.length() < 32) { //40 for SHA-1 
      result = "0" + result; 
     } 
    } 
    return result; 
} 

कोड से http://web.archive.org/web/20140209230440/http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or-mysql/

+0

धन्यवाद, मैंने पाया है कि अपने आप को सीधे प्रश्न लिखने के बाद। और यह काम करता है। – dan

3

मिले अपने आप:

import java.math.BigInteger; 
.. 
public static String md5(String input) throws NoSuchAlgorithmException { 
     String result = input; 
     if(input != null) { 
      MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1" 
      md.update(input.getBytes()); 
      BigInteger hash = new BigInteger(1, md.digest()); 
      result = hash.toString(16); 
      if ((result.length() % 2) != 0) { 
       result = "0" + result; 
      } 
     } 
     return result; 
    } 

स्रोत: http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or-mysql/

+2

लॉल मैंने अपनी पोस्ट हटा दी, एक ही जवाब के साथ इस सवाल का जवाब देने वाले 3 लोग थोड़े हास्यास्पद हैं ^^ – thecodeassassin

2

आप कच्चे एमडी 5 आउटपुट को आउटपुट कर रहे हैं, जो केवल बाइट्स का एक गुच्छा है। यदि आपने md5 ("कुछ स्ट्रिंग", सत्य) कहा तो आपको php में एक ही परिणाम मिल जाएगा।

आपको बाइट्स को एएससीआई अक्षरों में बदलने की आवश्यकता है।

1

आपको को HEX प्रतिनिधित्व में परिवर्तित करने की आवश्यकता है। यह है कि यह कैसे Fast MD5 library में किया जाता है:

import org.springframework.security.authentication.encoding.* 

new Md5PasswordEncoder().encodePassword("myWord",null) 

PHP::md5() के रूप में एक ही परिणाम:

private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', 
      '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', }; 

    /** 
    * Turns array of bytes into string representing each byte as unsigned hex 
    * number. 
    * 
    * @param hash 
    *   Array of bytes to convert to hex-string 
    * @return Generated hex string 
    */ 
    public static String asHex(byte hash[]) { 
     char buf[] = new char[hash.length * 2]; 
     for (int i = 0, x = 0; i < hash.length; i++) { 
      buf[x++] = HEX_CHARS[(hash[i] >>> 4) & 0xf]; 
      buf[x++] = HEX_CHARS[hash[i] & 0xf]; 
     } 
     return new String(buf); 
    } 

तो तुम System.out.println("String3: " + asHex(thedigest));

1

कॉल करने के लिए यदि आप वसंत सुरक्षा ढांचे का उपयोग, बस करो की आवश्यकता होगी। मैं पुष्टि

See more examples

संबंधित मुद्दे