2010-07-13 10 views
5

मुझे जावा सर्वलेट से कुछ स्ट्रिंग को एक php स्क्रिप्ट में पास करना होगा। तारों को एन्क्रिप्ट करने के लिए क्या विकल्प हैं? मुझे एक विधि की आवश्यकता होगी जो जावा और पीएचपी (जैसे..ए सीज़र सिफर ...) दोनों के लिए लागू किया गया हो। क्या कोई मानक एन्क्रिप्शन विधि है जो मुझे जावा और PHP दोनों के लिए लाइब्रेरी प्राप्त करने में सक्षम होना चाहिए?एन्क्रिप्शन विधि जो PHP और जावा दोनों के लिए लागू की गई है?

मैं जावा पक्ष पर तारों को एन्क्रिप्ट करना चाहता हूं, php स्क्रिप्ट पर पास करना चाहता हूं, फिर php स्क्रिप्ट उन्हें डिक्रिप्ट करने दें।

मैं प्रदाता की सीमाओं के कारण https का उपयोग नहीं कर सकता हूं।

धन्यवाद

उत्तर

14

उम्मीद है कि यह आपको शुरू कर सकता है। त्रुटि प्रबंधन गुम है और गुप्त कुंजी को कोडित किया गया है। उन दोनों को उत्पादन गुणवत्ता कोड के लिए संबोधित करने की आवश्यकता होगी। जावा की ओर से आप Java Cryptography Architecture (JCA) उपयोग कर सकते हैं:

import javax.crypto.Cipher; 
import javax.crypto.spec.SecretKeySpec; 
import javax.xml.bind.DatatypeConverter; 

public final void testTesting() throws Exception { 
    final String plainText = "plain text"; 
    final String result = encrypt(plainText); 
    System.out.println(result); 
} 

public String encrypt(final String plainText) throws Exception { 
    final byte[] data = plainText.getBytes("UTF-8"); 
    final byte[] encoded = encrypt(data); 
    final String result = new String(encoded); 
    return result; 
} 

public byte[] encrypt(final byte[] data) throws Exception { 
    // this is just an example key, real code should use a properly generated shared secret 
    final byte[] secret = new byte[] {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}; 
    final SecretKeySpec key = new SecretKeySpec(secret, "AES"); 

    final Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
    encryptCipher.init(Cipher.ENCRYPT_MODE, key); 
    final byte[] iv = encryptCipher.getIV(); 
    final byte[] encrypted = encryptCipher.doFinal(data); 

    final int outputLength = encrypted.length; 
    final int ivLength = iv.length; 

    final byte[] results = new byte[outputLength + ivLength]; 
    System.arraycopy(iv, 0, results, 0, ivLength); 
    System.arraycopy(encrypted, 0, results, ivLength, outputLength); 

    return DatatypeConverter.printBase64Binary(encoded); 
} 

पीएचपी ओर से, आप Mcrypt की जरूरत करने जा रहे हैं।

<?php 
$key = base64_decode('KioqKioqKioqKioqKioqKg=='); 
$input = base64_decode($_GET['input']); 
$plain_text = substr($input, 16); 
$initialization_vector = substr($input, 0, 16); 
echo pkcs5_unpad(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $plain_text, MCRYPT_MODE_CBC, $initialization_vector)); 

function pkcs5_unpad($text) { 
    $pad = ord($text{strlen($text)-1}); 
    if ($pad > strlen($text)) { 
     return false; 
    } 
    if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { 
     return false; 
    } 
    return substr($text, 0, -1 * $pad); 
} 
?> 

समारोह pkcs5_unpadhere से नकल किया गया था के बाद से ऐसा लगता है कि पीएचपी Mcrypt PKCS5 गद्दी के लिए समर्थन शामिल नहीं है। जावा कोड उस एन्क्रिप्ट करने के लिए प्रयुक्त प्रारंभिक वेक्टर के साथ डेटा उपसर्ग करता है। इसके बाद PHP कोड इसे दो में विभाजित करता है, प्रारंभिक वेक्टर और एन्क्रिप्टेड डेटा।

यह कोड CBC मोड में 128 बिट AES (Rijndael) का उपयोग करता है जो अधिकांश उपयोगों के लिए पर्याप्त सुरक्षित होना चाहिए। सरल एन्क्रिप्शन के अतिरिक्त, मैं का उपयोग करके here का वर्णन करने की सलाह देता हूं ताकि यह सुनिश्चित किया जा सके कि डेटा छेड़छाड़ नहीं किया गया है। जावा में एचएमएसी करने के लिए, Mac कक्षा का उपयोग करें। PHP के लिए, Mhash देखें।

+0

वाह हाँ यह वही है जो मुझे चाहिए। मैं इसे आज़मा दूंगा, यह सब सेट करने के लिए धन्यवाद, वापस रिपोर्ट करेगा। – user246114

0

Jasypt (http://www.jasypt.org/) किसी भी एल्गोरिथ्म आप चाहते हैं का प्रयोग करेंगे। कुछ मिनटों में किसी भी सामान्य algos को लागू करने में सक्षम होना चाहिए।

0

PHP के लिए mcrypt एक्सटेंशन देखें। उनमें से एक जावा में लगभग निश्चित रूप से मौजूद है।

0

अधिकांश मानक एन्क्रिप्शन एल्गोरिदम PHP और जावा दोनों में उपलब्ध हैं।

आप देख सकते हैं उन दोनों डेस, TripleDES, कम से कम RC2 समर्थन करते हैं:

पर एक नज़र डालें।

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