NodeJS 和 Express - 子字符串搜索
NodeJS and Express - substring search
在下面的代码中,我使用 Express JS 和 AES256 加密来根据预定义的密钥对简单的文本字符串进行编码和解码。
具体来说,Express JS Web 服务器允许我根据 URL 的内容显示某些元素。
例如,如果 URL 是 abc.com/encryption?code=hi,服务器将向我显示加密文本。但是,如果 URL 是 abc.com/decryption?code=NN(GFSO&8UOUSDB,我会得到纯文本。
加密过程中出现问题:当加密词中包含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()
函数中。
只有当您在字符串中找到任何一个符号时,才应该 return true
。返回 true 将保持 while 循环。
但是当字符串中不存在所有符号时,您正在 returning true
。在这种情况下,您应该 return false
以便 while 循环可以中断并且您可以获得最后一个字符串。
function validation(string){
if(["$","&","+",";","?"].some(v => string.includes(v))){
return true
}
return false
}
看看修改后的验证函数,它应该可以解决问题,而且您甚至不需要为此函数使用 async-await。
在下面的代码中,我使用 Express JS 和 AES256 加密来根据预定义的密钥对简单的文本字符串进行编码和解码。 具体来说,Express JS Web 服务器允许我根据 URL 的内容显示某些元素。 例如,如果 URL 是 abc.com/encryption?code=hi,服务器将向我显示加密文本。但是,如果 URL 是 abc.com/decryption?code=NN(GFSO&8UOUSDB,我会得到纯文本。 加密过程中出现问题:当加密词中包含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()
函数中。
只有当您在字符串中找到任何一个符号时,才应该 return
true
。返回 true 将保持 while 循环。但是当字符串中不存在所有符号时,您正在 returning
true
。在这种情况下,您应该 returnfalse
以便 while 循环可以中断并且您可以获得最后一个字符串。
function validation(string){
if(["$","&","+",";","?"].some(v => string.includes(v))){
return true
}
return false
}
看看修改后的验证函数,它应该可以解决问题,而且您甚至不需要为此函数使用 async-await。