Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用CryptoJS解码Base64字符串_Javascript_Php_Base64_Aes_Cryptojs - Fatal编程技术网

Javascript 使用CryptoJS解码Base64字符串

Javascript 使用CryptoJS解码Base64字符串,javascript,php,base64,aes,cryptojs,Javascript,Php,Base64,Aes,Cryptojs,我试图创建一个简单的网页,目标是向服务器发送加密消息(服务器将创建一个包含该内容的文件),然后创建一个链接,接收所提供链接的用户将能够看到加密值(因为它提供了文件名和密钥) 使用CryptoJS AES对消息进行加密,然后对结果进行Base64编码以进行解码,然后只将加密消息和加密消息的Base64发送到服务器,而不发送其他内容,这是使用Javascript完成的 我的问题是。我有一条消息,比如说“Hello World”,我用Base64编码,它给了我以下信息: 1ffffffff5a8ae5

我试图创建一个简单的网页,目标是向服务器发送加密消息(服务器将创建一个包含该内容的文件),然后创建一个链接,接收所提供链接的用户将能够看到加密值(因为它提供了文件名和密钥)

使用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”变量不是简单的字符串变量):

但是我需要使用一个字符串,因为它基于一个PHP$\u 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 !");
    }
}
//使用生成的密钥加密消息
函数加密(消息、密钥){
返回CryptoJS.AES.encrypt(消息、密钥);
}
//将字符串编码为Base64
函数encodeBase64(值){
返回CryptoJS.enc.Base64.parse(value.toString());
}
//从Base64编码解码字符串
函数decodeBase64(encodedValue){
返回CryptoJS.enc.Base64.stringify(encodedValue);
}
//使用生成的密钥解密消息
函数解密(加密,密钥){
返回CryptoJS.AES.decrypt(加密,密钥).toString(CryptoJS.enc.Utf8);
}
//生成随机密钥
函数generateKey(){
返回CryptoJS.lib.WordArray.random(16.toString();
}
//生成随机文件名
函数generateFileName(){
返回CryptoJS.lib.WordArray.random(16.toString();
}
//使用要发送到服务器的加密版本转换表单上的文本
函数SendMessage(消息,最终){
if((message.value).trim()){
var xmlhttp=新的XMLHttpRequest;
open(“POST”,“index.php”,true);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
//生成密钥并加密消息
var key=generateKey();
var encryptedData=encrypt(message.value,key);
var fileName=generateFileName();
xmlhttp.send(“fileName=“+fileName+”&encryptedsg=“+encodeBase64(encryptedData));
var finalURL=document.URL+“?MessageID=“+fileName+”&Key=“+Key;
FinalURL.innerHTML=“最终URL:

”; }否则{ 警报(“没有要加密的文本!”); } }
我遇到了类似的困惑,以下是解决方案供参考

要将文本字符串(UTF-8编码)转换为base-64字符串,您需要:

var textString = 'Hello world'; // Utf8-encoded string
var words = CryptoJS.enc.Utf8.parse(textString); // WordArray object
var base64 = CryptoJS.enc.Base64.stringify(words); // string: 'SGVsbG8gd29ybGQ='
要将base-64编码字符串转换回文本(UTF-8编码),需要:

var base64 = 'SGVsbG8gd29ybGQ=';
var words = CryptoJS.enc.Base64.parse(base64);
var textString = CryptoJS.enc.Utf8.stringify(words); // 'Hello world'
一些解释 从中给出的示例中可以看出,parse旨在以编码器期望的格式解析字符串(转换为WordArray),stringify将WordArray转换为字符串

从文件中:

var words  = CryptoJS.enc.Base64.parse('SGVsbG8sIFdvcmxkIQ==');
var base64 = CryptoJS.enc.Base64.stringify(words); // 'Hello, World!'
WordArray是CryptoJS的数据格式独立表示。格式化程序(如Base64和Utf8)是此WordArray格式和字符串之间的接口,字符串可能包含以任何格式编码的数据。因此,要在格式之间进行更改,两端都需要一个格式化程序,一个解析,一个字符串化(即编码)。在本例中,您需要记住,当我们编写“Hello World”时,它是以特定格式编码的文本(我假设为UTF-8)

我觉得很有帮助

var words  = CryptoJS.enc.Base64.parse('SGVsbG8sIFdvcmxkIQ==');
var base64 = CryptoJS.enc.Base64.stringify(words); // 'Hello, World!'