Frage

Aus einer Reihe komplizierter Gründe. Wir müssen Bilder über das Netzwerk im verschlüsselten Zustand senden und auf der anderen Seite mit AES entschlüsseln. Auf der Serverseite ist hier das, was passiert:

openssl aes-256-cbc -in pup.jpg -out pup.jpg.enc
base64 pup.jpg.enc > pup.jpg.enc.b64

Auf der Clientseite befindet sich hier das JavaScript, das wir verwenden:

<img id="picture"/>
<script>
    var picture = document.getElementById("picture");
    var data = new XMLHttpRequest();
    data.open('GET', 'http://server.com/pup.jpg.enc.b64', true);
    data.onreadystatechange = function(){
        if(this.readyState == 4 && this.status==200){
            var dec = CryptoJS.AES.decrypt(data.responseText, "password");
            var plain = CryptoJS.enc.Base64.stringify( dec );
        picture.src = "data:image/jpeg;base64,"+plain;
        }
    };
    data.send(null);
</script>

Ich bekomme eine Abweichung in der Eingabe und Ausgabe, und ich kann nicht herausfinden, warum für mein Leben. Hier ist die Eingabe und Ausgabe:

In:  /9j/4RLKRXhpZgAATU0AKgAAAAgADAEAAAMAAAABBADJx...
Out: /9j/4RLKRXhpZgAATU0AKgAAAAgADAEAAAMAAAABBAAAA...
                                               ^-- deviation

Muss ich den Kryptojs angeben, die ich 256 -Bit -Verschlüsselung verwende?

War es hilfreich?

Lösung

Das Problem scheint mit einem Fehler in Kryptojs zu sein, der dazu führt, dass die Bibliothek nicht funktioniert, wenn die Eingabezeichenfolge neue Zeilen enthält. Codierung der Datei wie dieser:

openssl enc -aes-256-cbc -in pup.jpg -pass pass:"password" | base64 | tr -d '\n' > pup.enc

Behebt das Problem. Das Problem mit dem JavaScript, aber mit der Codierung. Nun und mit JavaScript, weil es einen Fehler in Kryptojs gibt: https://code.google.com/p/crypto-js/issues/detail?id=38

Andere Tipps

Aus der Kryptojs -Dokumentation wird die Ausgabe von AES erwähnt. Decrypt ist der gleiche Typ wie die Ausgabe einer Hash -Funktion. Im Der Abschnitt Hasher -Ausgangsabschnitt Es gibt ein Beispiel, um dieses WordArray in eine basis 64 codierte Zeichenfolge zu konvertieren:

    alert(hash.toString(CryptoJS.enc.Base64)); // L3dmip37+NWEi57rSnFFypTG7ZI25Kdz9tyvpRMrL5E=
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top