2010-08-28 27 views
0

J'ai besoin de deux fonctions. Je souhaite transférer des données de mon site Web vers mon serveur au format xml. Maintenant sur mon serveur, je veux faire une fonction qui crypte les données et les place dans un fichier XML, et une autre fonction dans Java pour le décrypter.J'ai besoin de deux fonctions qui crypte certaines données en php et les décrypte en Java "correctement"

S'il vous plaît dites-moi s'il y a une fonction prédéfinie ou pouvez-vous simplement épargner 5 minutes?

+0

Cryptage/décryptage! = Codage/décodage. Quelle est l'exigence fonctionnelle? – BalusC

+0

Balus, merci de poster un commentaire. L'exigence est juste ce que j'ai déclaré, j'avais besoin de cryptage et de décryptage. –

Répondre

3

Eh bien, vous pouvez utiliser n'importe quelle fonction de cryptage mcrypt en PHP. Un exemple pour le cryptage AES 128:

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $key = "Put your secret key here"; 
    $text = "<xml>This is your XML text</xml>"; 

    //encrypting now with RIJNDAEL 128 encryption. 
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_ECB, $iv); 

    //Display encrypted content 
    echo $crypttext; 

Et pour déchiffrer, utilisez ce code (je ne suis pas un pro Java, donc il peut y avoir quelques bugs):

package org.kamal.crypto; 

import java.security.*; 
import java.security.spec.InvalidKeySpecException; 
import javax.crypto.Cipher; 
import javax.crypto.spec.SecretKeySpec; 
import sun.misc.*; 

public class SimpleProtector 
{ 
    private static final String ALGORITHM = "AES"; 
    private static final byte[] keyValue = 
     new byte[] { 'P', 'u', 't', ' ', 'Y', 'o', 'u', 'r', ' ', 'S', 'e', 'c', 'r', 'e', 't', ' ', 'K', 'e', 'y', '', 'H', 'e', 'r', 'e'}; 

    public static String decrypt(String encryptedValue) throws Exception { 
     Key key = generateKey(); 
     Cipher c = Cipher.getInstance(ALGORITHM); 
     c.init(Cipher.DECRYPT_MODE, key); 
     byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedValue); 
     byte[] decValue = c.doFinal(decordedValue); 
     String decryptedValue = new String(decValue); 
     return decryptedValue; 
    } 

    private static Key generateKey() throws Exception { 
     Key key = new SecretKeySpec(keyValue, ALGORITHM); 
     // SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); 
     // key = keyFactory.generateSecret(new DESKeySpec(keyValue)); 
     return key; 
    } 
} 
+0

shamittomar, Merci beaucoup pour votre réponse, c'est ce que je cherchais. Tu as fait ma journée! : D Que Dieu nous bénisse tous! –

+0

Je n'ai pas encore vérifié les fonctions, mais je le ferai bientôt pour sécuriser mes données. –

+0

De rien. Vérifiez simplement le code Java. Je ne suis pas un pro, il y a peut-être des bugs. – shamittomar

-1

Avez-vous étudié JSON?

Il est pas chiffré, mais il est un moyen facile de transmettre des données et-vient entre les différents programmes et langues.

+0

-1 - JSON est un schéma de codage, pas un schéma de chiffrement. Le cryptage (même quelque chose d'aussi simple que ROT13) consiste à obscurcir la signification, et JSON ne tente pas de le faire. –

+0

@Stephen C J'en suis tout à fait conscient, et je crois que ma réponse est claire aussi. Il n'est pas vraiment clair si le PO est équivoque ou demande réellement au sujet de la sécurité. Vous remarquerez que je n'ai pas présenté JSON comme une solution de sécurité, simplement une solution de codage/décodage pour transmettre des informations entre PHP et Java, par les balises de la question. – cbednarski

+0

Si vous avez dit "ceci est encodage plutôt que cryptage" plutôt que "ce n'est pas cryptage d'un point de vue sécurité", je n'aurais aucun problème avec votre réponse. Clairement, ce que vous avez écrit implique que votre solution * est * crypter "d'un point de vue non-sécurité" qui est absurde: d'où mon downvote. –