Ich verschlüssele eine Datei in Java und muss es auf der Clientseite entschlüsseln. Dies ist der Server-Seite Code:CryptoJS entschlüsseln (AES) eine Datei Bytearray aus Java
Key secretKey = new SecretKeySpec("mysecretmysecret".getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] outputBytes = cipher.doFinal(read(sampleFile));
return outputBytes;
Auf Client-Seite I Ajax-Anfrage verwenden, um die Datei und verwenden CryptoJS AES zu holen:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'file', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
var encryptedData = this.response;
var decrypted = CryptoJS.AES.decrypt(encryptedData, "mysecretmysecret");
console.log(decrypted);
};
xhr.send();
Aber diese die Datei nicht entschlüsseln. Ich werde dies in der Konsole entschlüsselt als Wert gedruckt:
W…y.init {words: Array[0], sigBytes: 0}
ich auch die Umwandlung Arraybuffer zu WordArray versucht haben vorgeschlagen here aber immer noch das gleiche Ergebnis. Ich wäre mehr als froh, wenn mir jemand in die richtige Richtung zeigen und mir sagen könnte, was ich falsch gemacht habe.
Bearbeiten 1: Ich habe das Problem gelöst. Der Code, den ich verwendet habe, wird als Antwort gepostet.
"mysecretmysecret" ist wahrscheinlich nicht so geheim, wenn es dort im Client-Quellcode sitzt. –
@AlexK. Dies ist nur ein POC. Noch nicht in echtem Code. – Sandeep
Verwenden Sie keine Zeichenfolgen als Schlüssel, verwenden Sie Bytearrays. Die Konvertierung von einem String in ein Byte-Array ist mehrdeutig (BoM am Start? \ 0 Terminator? Usw.). Insbesondere bei der Übertragung verschlüsselter Daten zwischen Systemen ** ** ** nicht auf Systemstandards verlassen. Explizit gesetzter Modus, IV/Nonce usw. Sie machen wenig davon und verlassen sich darauf, dass die Standardeinstellungen auf allen Systemen gleich sind. Alle nicht übereinstimmenden Standardwerte verursachen Probleme. – rossum