Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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 NodeJS和Express-子字符串搜索_Javascript_Node.js_Express_Encryption_Aes - Fatal编程技术网

Javascript NodeJS和Express-子字符串搜索

Javascript NodeJS和Express-子字符串搜索,javascript,node.js,express,encryption,aes,Javascript,Node.js,Express,Encryption,Aes,在下面的代码中,我使用expressjs和AES256加密来基于预定义密钥对简单文本字符串进行编码和解码。 具体来说,expressjsweb服务器允许我根据URL的内容显示某些元素。 例如,如果URL是abc.com/encryption?code=hi,服务器将向我显示加密文本。但是,如果URL是abc.com/decryption?code=NN(GFSO&8uousb),我会得到纯文本。 加密过程中会出现问题:当加密的字包含HTTP识别的特殊符号($,&,+,;,?)时,解码完全失败。

在下面的代码中,我使用expressjs和AES256加密来基于预定义密钥对简单文本字符串进行编码和解码。 具体来说,expressjsweb服务器允许我根据URL的内容显示某些元素。 例如,如果URL是abc.com/encryption?code=hi,服务器将向我显示加密文本。但是,如果URL是abc.com/decryption?code=NN(GFSO&8uousb),我会得到纯文本。 加密过程中会出现问题:当加密的字包含HTTP识别的特殊符号($,&,+,;,?)时,解码完全失败。 验证条件在逻辑上似乎是正确的,但我不能总是获得有效的结果。 多谢各位

const aes256 = require('aes256');
const express = require('express');
const web_server = express();

var key = 'LeIdeeMettonoInMotoIlFuturo';
var cipher = aes256.createCipher(key);

async function aes_encryption(plaintext) {
  do{
    var encrypted = await cipher.encrypt(plaintext);
  } while (await validation(encrypted))
  return encrypted;
}

async function validation(string){
  if (string.indexOf("$") != -1 && string.indexOf("&") != -1 && string.indexOf("+") != -1 && string.indexOf(";") != -1 && string.indexOf("?") != -1){
    return true;
  }
  return false;
}

async function aes_decryption(encrypted){
  var decrypted = await cipher.decrypt(encrypted);
  return decrypted;
}

web_server.get('/', function (request, response) {
  response.send('Write /encryption/:parola_da_codificare or /decryption/:testo_da_decodificare');
})

web_server.get('/encryption/', async function (request, response) {
  var result = await aes_encryption(request.query.code);
  response.send('Your code crypted is: ' + result);
})

web_server.get('/decryption/', async function (request, response) {
  var result = await aes_decryption(request.query.code);
  response.send('Your code decripted is: ' + result);
})

web_server.listen(3000)

问题出在
validation()
函数中

  • 只有在字符串中找到任何一个符号时,才应返回
    true
    。返回true将保持while循环打开

  • 但是当字符串中不存在所有符号时,您返回的是
    true
    。在这种情况下,您应该返回
    false
    ,这样while循环可以中断,您可以获得最后一个字符串


  • 看看修改后的验证函数,它应该可以解决这个问题,您甚至不需要异步等待这个函数。

    您应该将代码发送到请求头中的body-else中。@DeekshithHegde这只是一个良好的编程实践建议还是代码正确性的决定因素?始终是n在URL中发送敏感数据是一种很好的做法。除此之外,URL还有一些限制,它不允许您在请求中发送特殊字符,因此在这种情况下,您应该切换到Post方法或在标题中发送。第二种方法在您的情况下是很好的选择
    function validation(string){
    
        if(["$","&","+",";","?"].some(v => string.includes(v))){
            return true
        }
        return false
    }