2017-01-27 2 views
1

Я переадресую вызовы API из моего интерфейса на мой сервер. Я шифрую вызовы API, используя CryptoJS.AES, используя кодовую фразу «somekey».CryptoJs не расшифровывает URL-адрес моего сервера NodeJS

Мой соответствующий код клиента ...

var host = 'http://localhost:3000' 

$('.send-button').click(function(){ 
    var request = $('.request-input').val(); 
    var encryptedRequest = CryptoJS.AES.encrypt(request, 'somekey'); 
    console.log(encryptedRequest.toString()) 
    var decryptedRequest = CryptoJS.AES.decrypt(encryptedRequest, 'somekey'); 
    console.log('Decrypted Request: ' + decryptedRequest.toString()); 
    handleRequest(encryptedRequest.toString()); 
}); 

var handleRequest = function(request){ 
    $.ajax({ 
     type: "GET", 
     url: host + '/requests?call=' + request, 
     success: function(data) { 
     var rawJSON = JSON.stringify(data, null, 2); 
     editor.setValue(rawJSON); 
     }, 
     dataType: 'json' 
    }); 
} 

отношение стороне сервера код ...

var port = 3000; 
var serverUrl = "127.0.0.1"; 

var http = require("http"); 
var path = require("path"); 
var fs = require("fs"); 
var express = require("express"); 
var CryptoJs = require("crypto-js"); 
var app = express(); 

app.get('/requests', function(req, res) { 
    console.log('REQUEST: ' + req); 
    var call = req.query.call; 
    console.log(call) 
    console.log("To send: " + CryptoJs.AES.decrypt(call, 'somekey')); 
}); 

Проблема, которую я получаю, что это то, что когда я его расшифровать его либо Безразлично 'получить исходный URL-адрес и вместо этого получить кучу суматохи. Примером этого является ...

Encryption: U2FsdGVkX1/NRbZkyP60pPu3Cb9IcQ4b9n4zJkExp2LNR3O1EdEpqHLNACnYuatN 

Decryption: 68747470733a2f2f6e6577736170692e6f72672f76312f61727469636c6573 

OR ... Он просто ничего не возвращает и отображается пустым.

В идеале мне бы хотелось что-то вроде этого.

Encryption: U2FsdGVkX1/NRbZkyP60pPu3Cb9IcQ4b9n4zJkExp2LNR3O1EdEpqHLNACnYuatN 

Decryption: https://newsapi.org/v1/articles 

Может ли кто-нибудь увидеть, что я донг ошибаюсь?

+0

Обновление: Исправлена ​​небольшая ошибка. Но все равно такая же проблема. Код был отредактирован. –

ответ

1

Вот рабочий jsfiddle: https://jsfiddle.net/5Lr6z4zp/1/

Результаты шифрования в строку Base64, а расшифрованные строка Hex. Для того, чтобы вернуть «сообщение» вам нужно преобразовать, что в utf8: decryptedRequest.toString (CryptoJS.enc.Utf8)

Вот соответствующая часть кода, который работает:

var request = "testing decryption"; 
var encryptedRequest = CryptoJS.AES.encrypt(request, 'somekey'); 
console.log(encryptedRequest) 
var decryptedRequest = CryptoJS.AES.decrypt(encryptedRequest, 'somekey'); 
var decryptedMessage = decryptedRequest.toString(CryptoJS.enc.Utf8) 
console.log('Decrypted Request: ' + decryptedMessage); 

Вот ссылку на ресурсы, которые объясняют шифрование/дешифрование более подробно: http://www.davidebarranca.com/2012/10/crypto-js-tutorial-cryptography-for-dummies/

+0

Спасибо! Это сработало. Однако сейчас я вижу проблемы с производительностью. Иногда для расшифровки сообщения требуется много времени, и часто, если просто возвращает пустые строки. Иногда это даже через исключение. Ошибка: неверные данные UTF-8. –

+0

ПОЛУЧАЛ: ПОЛУЧАЛ: https://newsapi.org/v1/articles ПОЛУЧАЛ: ПОЛУЧАЛ: ПОЛУЧАЛ: ПОЛУЧАЛ: ПОЛУЧАЛ: Это пример из моих журналов узлов. –

+0

Возможно, вам следует отправить зашифрованный запрос как есть в бэкэнд в обработчике, а не преобразовать его в строку и затем отправить его. –

Смежные вопросы