Decodificar uma String Base64 usando CryptoJS

Estou tentando criar uma página da Web simples com o objetivo de enviar uma mensagem criptografada para o servidor (que criará um arquivo com esse conteúdo), um link será criado e o usuário que receber o link fornecido poderá ver o arquivo criptografado. valor (já que fornece o nome do arquivo e a chave).

A mensagem é criptografada usando o CryptoJS AES e o resultado é codificado em Base64 para ser decodificado depois disso, apenas o Base64 da mensagem criptografada e a mensagem criptografada são enviados ao servidor e nada mais, e isso é feito usando Javascript.

Minha pergunta aqui é. Eu tenho uma mensagem, digamos "Hello World", que eu codifico usando o Base64, e isso me dá o seguinte:

1ffffffff5a8ae57

Se eu enviar esse valor para uma variável e usar essa variável, ele mostrará um resultado:

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

O que é normal. Mas se eu tentar escrever diretamente o texto (ou apenas fazer um toString (), ele não funcionará ... o que também é normal porque a variável 'test' não é uma variável String simples):

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

Mas preciso usar uma String, pois ela se baseia em um valor PHP $ _GET, que é decodificado usando Javascript novamente. Então, minha pergunta é: como posso fazer isso para codificar uma String e decodificar o resultado como uma String?

Este é o meu arquivo engine.js:

// 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 !");
    }
}

questionAnswers(1)

yourAnswerToTheQuestion