2009-04-21 4 views
0

Ich muss eine Handshake-Seite in PHP machen, die eine Querystring, die für eine Funktion in Java/JSP verschlüsselt ist und entschlüsseln sie in PHP-fir Verwendung in einer Anwendung.Encrypt Sting in JSP ... Entschlüsseln in PHP

Ich habe festgestellt, dass dies ein guter Ausgangspunkt http://propaso.com/blog/?cat=6 ist, aber es verschlüsselt in PHP und entschlüsselt in PHP, das Gegenteil von dem, was ich tun muss.

Wer weiß, gemeinsame Chiffren in PHP/JSP zu verwenden. Von den obigen Link finden Sie die CBC ist eine Antwort scheint, Code unten:

PHP Cipher/Modus:

$cipher  = "rijndael-128"; 
$mode  = "cbc"; 

und JSP Cipher:

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); 

jemand eine gute Verbindung zu helfen wissen, Ich bekomme diesen Prozess umgekehrt und verschlüsseln in JSP und entschlüsseln in PHP.

Dank

Antwort

2

Sie benötigen einen IV haben, die für eine bestimmte Nachricht nicht vorhersehbar ist. Durch die harte Codierung der IV ist sie vorhersehbar. Sie müssen also einen Weg finden, die IV mit dem Chiffretext zu bestehen. Die IV muss im Gegensatz zum Schlüssel jedoch nicht geheim gehalten werden.

Eine Blockchiffre arbeitet auf einem Klartextblock fester Größe. Wenn Sie nicht genügend Klartext zur Eingabe haben, muss dieser so aufgefüllt werden, dass ein Empfänger die Auffüllung von den Daten unterscheiden kann. Das verknüpfte Beispiel ignoriert das vollständig und das ist ein Fehler. Wenn ein CipherOutputStream verwendet wird, wird ein unvollständiger endgültiger Block stillschweigend vom Chiffretext abgeschnitten. Wenn das Objekt Cipher direkt verwendet wird, führt ein Teilblock dazu, dass die Methode doFinal eine Ausnahme auslöst. Verwenden Sie stattdessen etwas wie PKCS5Padding.

Ein richtiges Java-Beispiel würde wie folgt sein:

SecretKey secret = new SecretKeySpec(key, "AES"); 
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
cipher.init(Cipher.ENCRYPT_MODE, secret); 
AlgorithmParameters param = cipher.getParameters(); 
/* In addition to ciphertext in "cos", recipient needs IV. */ 
byte[] iv = param.getParameterSpec(IvParameterSpec.class).getIV(); 
CipherOutputStream cos = new CipherOutputStream(output, cipher); 
byte[] buf = new byte[2048]; 
while (true) { 
    int n = input.read(buf, 0, buf.length); 
    if (n < 0) 
    break; 
    cos.write(buf, 0, n); 
} 
cos.flush(); 

Wo ist der JSP Empfangs-Text verschlüsselt werden? Wie soll die JSP ihre Ausgabe formatieren (einschließlich der IV)?

+0

kann ich das mit meinem Jsp-Code verwenden: O? –