Dekodiere einen Base64-String mit CryptoJS

Ich versuche, eine einfache Webseite mit dem Ziel zu erstellen, eine verschlüsselte Nachricht an den Server zu senden (wodurch eine Datei mit diesem Inhalt erstellt wird). Anschließend wird ein Link erstellt, und der Benutzer, der den angegebenen Link erhält, kann die verschlüsselte Nachricht sehen value (da es den Namen der Datei und den Schlüssel enthält).

Die Nachricht wird mit CryptoJS AES verschlüsselt, und das Ergebnis wird Base64-codiert, um danach decodiert zu werden. Nur die Base64 der verschlüsselten Nachricht und der verschlüsselten Nachricht werden an den Server gesendet, und dies erfolgt mit Javascript.

Meine Frage ist hier. Ich habe eine Nachricht, sagen wir "Hello World", die ich mit Base64 codiere, und sie gibt mir Folgendes:

1ffffffff5a8ae57

Wenn ich diesen Wert an eine Variable sende und dann nur diese Variable verwende, wird folgendes Ergebnis angezeigt:

// Works !
var test = CryptoJS.enc.Base64.parse("Hello World");
alert(CryptoJS.enc.Base64.stringify(test));

Welches ist normal. Aber wenn ich versuche, den Text direkt zu schreiben (oder einfach einen toString () zu machen, funktioniert das nicht ... was auch normal ist, weil die 'test'-Variable keine einfache String-Variable ist):

// Doesn't work !
var test = CryptoJS.enc.Base64.parse("Hello World").toString();
alert(CryptoJS.enc.Base64.stringify(test));

Ich muss aber einen String verwenden, da dieser auf einem PHP $ _GET-Wert basiert, der dann wieder mit Javascript dekodiert wird. Meine Frage ist also, wie kann ich dies tun, um einen String zu kodieren und das Ergebnis dann als String zu dekodieren?

Dies ist meine engine.js Datei:

// Encrypt the message using a generated key
function encrypt(message, key) {
    return CryptoJS.AES.encrypt(message, key);
}

// Encode String to Base64
function encodeBase64(value) {
    return CryptoJS.enc.Base64.parse(value.toString());
}

// Decode String from Base64 Enconding
function decodeBase64(encodedValue) {
    return CryptoJS.enc.Base64.stringify(encodedValue);
}

// Decrypt the message using the generated key
function decrypt(encrypted, key) {
    return CryptoJS.AES.decrypt(encrypted, key).toString(CryptoJS.enc.Utf8);
}

// Generate the random key
function generateKey() {
    return CryptoJS.lib.WordArray.random(16).toString();
}

// Generate the random fileName
function generateFileName() {
    return CryptoJS.lib.WordArray.random(16).toString();
}

// Convert the text on the form with the encrypted version to be sent into the server
function SendMessage(message, FinalURL) {
    if ((message.value).trim()) {
        var xmlhttp = new XMLHttpRequest;
        xmlhttp.open("POST", "index.php", true);
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

        // Generate the Key and Encrypt the Message
        var key             = generateKey();
        var encryptedData   = encrypt(message.value, key);
        var fileName        = generateFileName();      

        xmlhttp.send("fileName=" + fileName + "&encryptedMsg=" + encodeBase64(encryptedData));

        var finalURL = document.URL + "?MessageID=" + fileName + "&Key=" + key;

        FinalURL.innerHTML = "<p>Final URL: <a href=" + finalURL + ">" + finalURL + "</a></p>";
    } else {
        alert("There is no text to be encrypted !");
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage