2010-07-20 9 views
12

मैं अपना PHP कोड Google App Engine - Java पर माइग्रेट कर रहा हूं।
तो मुझे जावा,
में PHP के क्रिप्ट फ़ंक्शन के समतुल्य की आवश्यकता है क्योंकि मैंने अपने डीबी में क्रिप्ट का उपयोग करके पंजीकृत उपयोगकर्ताओं के सभी पासवर्ड
संग्रहीत किए हैं।जावा में PHP के क्रिप्ट फ़ंक्शन के समतुल्य

संपादित करें 1: यहाँ पासवर्ड एन्क्रिप्ट के लिए मेरे php कोड है:

$ पासवर्ड = "test123";
$ pwd = crypt ($ पासवर्ड, $ पासवर्ड);
echo $ pwd;
temjCCsjBECmU

कोई मुझे equivalted जावा कोड दे सकते हैं:

आउटपुट (विंडोज के साथ-साथ पर एक लिनक्स आधारित सर्वर HostMonser पर) है?
मैं विभिन्न क्रमपरिवर्तन
MessageDigest वर्ग के साथ & संयोजनों की कोशिश की है, लेकिन यह सही नहीं मिल सकता है ..

संपादित 2:

:
यहाँ नमूना कोड जो मैं काम करेगा सोचा लेकिन नहीं किया है
try { 
       { 
        String password = "test123"; 
        MessageDigest digest = MessageDigest.getInstance("MD5"); 
        byte[] passwordBytes = password.getBytes(); 

        digest.reset(); 
        digest.update(passwordBytes); 
        digest.update(passwordBytes); 
        byte[] message = digest.digest(); 

        StringBuffer hexString = new StringBuffer(); 
        for (int i=0; i < message.length; i++) 
        { 
         hexString.append(Integer.toHexString(
          0xFF & message[ i ])); 
        } 
        String encrypted = hexString.toString(); 
        System.out.println(encrypted); 
        } } catch (NoSuchAlgorithmException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
+1

कृपया मुझे बताएं कि आप डिफ़ॉल्ट (डीईएस) क्रिप्ट एल्गोरिदम का उपयोग नहीं कर रहे हैं .... एक कारण है कि आधुनिक यूनिक्स क्रिप्ट उपयोगिता के साथ नहीं आते हैं - इसे पहले तोड़ा गया है। –

+0

@ बिली ओनेल: PHP का डिफ़ॉल्ट ओएस निर्भर है। लिनक्स/बीएसडी पर, यह नमकीन एमडी 5 (वास्तव में पुराने संस्करणों को छोड़कर) के लिए डिफ़ॉल्ट है। नए संस्करण भी एक नई योजना का उपयोग कर सकते हैं, जैसे नमकीन SHA512। – Powerlord

+0

@ बिली ओनेल: हालांकि, कोड जो डीटीए * बस * पोस्ट किया गया है वास्तव में डीईएस है ... PHP 5.2 या उससे कम के साथ एक विंडोज मशीन पर होना चाहिए। – Powerlord

उत्तर

4

आप अपने ओएस पर निर्भर करता है, पता है कि पीएचपी तहखाने के कार्यान्वयन इस्तेमाल किया गया है (?? MD5 SHA256 SHA512) कई देखते हैं क्योंकि है: http://php.net/manual/fr/function.crypt.php

जावा बराबर वर्ग MessageDigest है। जब आप इस वर्ग का एक उदाहरण बनाने के लिए, आप हैश एल्गोरिथ्म प्रदान करते हैं, उदाहरण के लिए:

:

MessageDigest md = MessageDigest.getInstance("MD5"); 
MessageDigest md2 = MessageDigest.getInstance("SHA-256"); 
MessageDigest md3 = MessageDigest.getInstance("SHA-512"); 
// etc. 
byte[] encryptedPassword = md.digest("yourPassword".getBytes()); 
+0

वह PHP मैनुअल पृष्ठ फ्रेंच में है, अंग्रेजी संस्करण यहां: http://php.net/manual/en/function.crypt.php – Powerlord

+0

मुझे खेद है। सुधारों के लिए धन्यवाद। चूंकि मैं फ्रेंच हूं, मैंने जवाब नहीं दिया जब मैंने प्रतिक्रिया पोस्ट की। –

+1

क्रिप्ट कुंजी के साथ क्रिप्ट कैसे करें? जावा में एक क्रिप्ट कुंजी का उपयोग करने का कोई तरीका है, जैसे आप php में करेंगे? उदाहरण के लिए क्रिप्ट ($ पासवर्ड, "टेस्ट") php में क्रिप्ट ($ पासवर्ड) से अलग एन्क्रिप्ट करेगा ... –

0

खैर, PHP की क्रिप्ट वास्तव में एन्क्रिप्शन नहीं है जहां तक ​​मुझे पता है। यह सिर्फ एक-तरफा हैशिंग फ़ंक्शन के आसपास एक रैपर है, मेरा मानना ​​है कि यदि आपकी वर्तमान PHP साइट क्रिप्ट के एमडी 5 या SHA256 या जो भी हो, तो मैं उम्मीद करता हूं कि आप जावा में उन समकक्ष हैशिंग क्लासेस/फ़ंक्शंस को पा सकते हैं।

1

आप java.security वर्गों (क्या JCE TBE करते थे) पर एक नज़र लेने की जरूरत वहां आप जो कुछ भी चाहते हैं उसे करने के लिए आपको वह सब कुछ मिलेगा (जिस पर आपको आवश्यक एल्गोरिदम की आवश्यकता है)।

http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/package-summary.html

उदा MD5/एस एच ऐ आदि के लिए MessageDigest:

http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/MessageDigest.html

चेक गूगल एप इंजन श्वेत सूची यहां के खिलाफ इन, मुझे यकीन है कि क्या समर्थित है और क्या नहीं कर रहा हूँ नहीं है।

http://code.google.com/appengine/docs/java/jrewhitelist.html

जावा।

http://www.jasypt.org/

2

ऐसा लगता है आप के साथ काम करना है: जो एक अधिक सरलीकृत एपीआई है कि किसी भी JCE के साथ काम करता है - सुरक्षा सामान एक दर्द का एक सा कभी कभी के साथ काम किया जा सकता है, तो आप वैकल्पिक रूप से Jasypt उपयोग कर सकते हैं एक विरासत डेटाबेस पहले से ही उन पासवर्ड से पॉप्युलेट किया गया है जिन्हें आप त्याग नहीं सकते हैं, इसलिए आप केवल switch to a salted MessageDigest नहीं कर सकते हैं, अधिमानतः SHA-1 का उपयोग कर सकते हैं। और आपकी समस्या अधिक जटिल हो जाती है, क्योंकि PHP की क्रिप्ट एक रैपर है जो might use one of several algorithms है। लेकिन मान लीजिए कि आपका PHP मूल डीईएस-आधारित यूनिक्स क्रिप्ट का उपयोग करता है, तो आपको जावा में इसका कार्यान्वयन करने की आवश्यकता है। जहां तक ​​मुझे पता है, मानक जावा स्थापना में यूनिक्स के क्रिप्ट का कोई कार्यान्वयन नहीं है, लेकिन आप विकल्पों की सूची के लिए look here करना चाहेंगे।

+0

404 बनाता है ... – James

1

PHP का क्रिप्ट एकाधिक हैश फ़ंक्शंस का समर्थन करता है। आप MD5 संस्करण का उपयोग (हैश $ 1 $ साथ शुरू होता है), तो आप एक जावा कार्यान्वयन यहां पा सकते हैं,

http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt.java.htm

कृपया ध्यान दें कि वे अपने स्वयं के MD5 वर्ग का उपयोग करें। मुझे यकीन नहीं है कि यह मानक एमडी 5 जैसा ही है।

मुझे यकीन है कि आप अन्य हैश एल्गोरिदम के लिए जावा कार्यान्वयन भी पा सकते हैं।

10

यह एक पुराना धागा है लेकिन मैं एक ही मुद्दे में भाग गया और एक अलग समाधान मिला। आप Apache Commons Codec 1.7 लाइब्रेरी में यूनिक्स क्रिप्ट/एमडी 5 क्रिप्ट कक्षाओं का उपयोग कर सकते हैं।

उदाहरण के लिए आप कॉल कर सकते हैं

UnixCrypt.crypt(string, salt) 

या

Md5Crypt.md5Crypt(byte[], salt) 

मैं अन्य एन्क्रिप्शन प्रकार में देखा नहीं है, लेकिन मुझे लगता है उनके अन्य उपयोगिताओं हैं और साथ ही।

+0

यह सही जवाब है ... धन्यवाद – James

0

मैं इस सिफारिश कर सकते हैं: MD5Crypt implementation

MD5Crypt.crypt("youPassword"); // output: $1$zSiw0koU$i3Srfmoxx4VPePJHWqAuK/ 

यह कुछ कार्यान्वयन में से एक है, जो मेरे लिए काम करता है।

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