Я пытаюсь создать простую веб-страницу с целью отправки зашифрованного сообщения на сервер (который создаст файл с этим содержимым), затем создается ссылка, и пользователь, получивший предоставленную ссылку, сможет увидеть зашифрованное значение (поскольку оно предоставляет имя файла и ключ).
Сообщение шифруется с помощью CryptoJS AES, и в результате кодируется Base64 для последующего декодирования, только Base64 зашифрованного сообщения и зашифрованное сообщение отправляется на сервер и ничего больше, и это делается с помощью Javascript.
Мой вопрос вот в чем. У меня есть сообщение, скажем, «Hello World», которое я кодирую с помощью Base64, и оно дает мне это:
1ffffffff5a8ae57
Если я отправлю это значение в переменную, а затем просто использую эту переменную, она покажет результат:
// Works !
var test = CryptoJS.enc.Base64.parse("Hello World");
alert(CryptoJS.enc.Base64.stringify(test));
Это нормально. Но если я попытаюсь написать непосредственно текст (или просто сделать toString(), это не сработает... что также нормально, потому что переменная "test" не является простой строковой переменной):
// Doesn't work !
var test = CryptoJS.enc.Base64.parse("Hello World").toString();
alert(CryptoJS.enc.Base64.stringify(test));
Но мне нужно использовать строку, поскольку она основана на значении PHP $_GET, которое затем снова декодируется с использованием Javascript. Итак, мой вопрос: как я могу это сделать, чтобы закодировать строку, а затем декодировать результат как строку?
Это мой файл 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 !");
}
}