2016-05-21 16 views
-2

Ein Client mir eine verschlüsselte Nachricht die Cipher.encrypt() Funktion (von einigen Programmiersprache mir unbekannt) wie unten beschrieben unter Verwendung gesandt hat:Was ist das Äquivalent dieser Cipher.encrypt() Funktion in PHP

var key : String = "I deleted the key intentionally"; 
    var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8")); 

    var salt : String = "263BC60258FF4876"; 

    var message : String = "1234567891234567"; 

    var encryptAlgorithm : String = "AES/CBC/PKCS5Padding"; 

    var encryptedMessage : Cipher = new Cipher(); 
    encryptedMessage = encryptedMessage.encrypt(message, encodedKey, encryptAlgorithm, salt, 1); 

Ich muss die Nachricht entschlüsseln, um Daten daraus mit PHP zu extrahieren. Ich habe versucht, die PHP-Funktion mcrypt_decrypt zu verwenden:

string mcrypt_decrypt (string $cipher , string $key , string $data , string $mode [, string $iv ]) 

Aber ich konnte die Nachricht nicht entschlüsseln, da die zwei Funktionen verschiedene Argumente zu haben scheinen.

Hat also jemand Vorschläge, wie man die Nachricht mit PHP entschlüsseln kann?

+2

Jemand muss diese Sprache zuerst erkennen. –

+0

Sieht aus wie die Sprache ist [ActionScript] (http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/variables.html) –

+1

Es ist am besten, nicht mcrypt zu verwenden, es ist abandonware, war es nicht aktualisiert in Jahren und unterstützt nicht Standard-PKCS # 7 (bisher PKCS # 5) Padding, nur Nicht-Standard-Null-Padding, das nicht einmal mit Binärdaten verwendet werden kann. mcrypt hatte viele ausstehende [Bugs] (https://sourceforge.net/p/mcrypt/bugs/), die auf das Jahr 2003 zurückgehen. Stattdessen sollten Sie [defuse] verwenden (https://github.com/defuse/php-encryption). Es wird beibehalten und ist korrekt. – zaph

Antwort

0

Die folgende Zeile ergibt keinen Sinn, sie scheint "rückwärts" zu sein.

var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8")); 

den Schlüssel Unter der Annahme war Base64 codiert (was sinnvoll ist) man es in ein Byte-Array zu dekodieren erwarten würde und Encoding.toBase64 scheint falsch. Aber das ist eine Suche, da die Sprache unbekannt ist, fragen Sie den Kunden, was die Sprache ist.

Als nächstes scheint es, dass die Nachricht mit PKCS # 5 Padding verschlüsselt wurde und mcrypt unterstützt das nicht. Es gibt ein paar Lösungen: 1. Entfernen Sie die Auffüllung in Ihrem PHP-Code. 2. Verwenden Sie eine bessere Bibliothek, die PKCS 5-Auffüllung unterstützt, z. B. defuse.

Die wertvolle salt ist wahrscheinlich der IV (Initialization Vector) schlecht benannt.