Я пытаюсь создать скрипт, который получает запросы на вкладке сети и отправляет их на страницу отладки, запросы зашифрованы aes-128-cbc, но RAW не base64, поэтому существуют некоторые специальные символы, проблема в том, что специальные символы каким-то образом отправляются поврежденными на страницу отладки.
например:
«Тест» (без кавычек) шифруется
ключ test1234
и iv 1235569767556087
используя php код
openssl_encrypt("A test",'aes-128-cbc',"test1234",OPENSSL_RAW_DATA,"1235569767556087");
дал следующий результат: ) , AM9 ,
, который представлен в целочисленном массиве как
[191,242,41,173,235,176,231,44,232,65,77,2,57,170,44,175]
когда зашифрованная строка отправляется на страницу отладки, она выглядит следующим образом
[239,191,189,239,191,189,41,239,191,189,239,191,189,239,191,189,44,239,191,189,65,77,2,57,239,191,189,44,239,191,189]
как вы можете заметить, каждый represented представлен 3 байтами (239,191,189) вместо действительного байта
Я использую Google Chrome, а код js выглядит следующим образом:
var SendDebugRequest = function(url,posted_data,callback){
var xhr = new XMLHttpRequest();
xhr.open('POST', "http://127.0.0.1/debug.php", true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
var status = xhr.status;
if (status === 200) {
callback(null, xhr.response,xhr.responseURL);
} else {
callback(status, xhr.response,xhr.responseURL);
}
};
xhr.send(posted_data);}
Promise.all(UI.panels.network._networkLogView._dataGrid._rootNode._flatNodes.map( function(node){
var temp = [];
temp[1] = node._request._requestHeaders;
node._request._requestFormDataPromise.then(function(data) { temp[0] = data;});
node._request.contentData().then(function(data) { temp[2] = data.content;});
return temp;})).then(function(daata){
var posted_data = "encrypted_text=" + encodeURIComponent(daata[0][2]) + "&form_data=" + encodeURIComponent(daata[0][0]) ;
SendDebugRequest('',posted_data,function (status,response,resp_url){});});
Так есть ли идеи о том, как я могу решить эту проблему?
заранее спасибо
EDIT:
как предложено в комментарии, я попытался использовать FormData вместо encodeURIComponent, но также дал тот же результат
я изменил
var posted_data = "encrypted_text=" + encodeURIComponent(daata[0][2]) + "&form_data=" + encodeURIComponent(daata[0][0]) ;
SendDebugRequest('',posted_data,function (status,response,resp_url){});});
до
var formData = new FormData();
var encrypted_text = new Blob([daata[0][2]], { type: "application/octet-stream"});
formData.append('encrypted_text', encrypted_text);
formData.append('form_data', daata[0][0]);
SendDebugRequest('',formData,function (status,response,resp_url){});
и убрал строку
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
РЕДАКТИРОВАТЬ 2:
Проблема в том, что хром дает текстовый ответ вместо реального необработанного шестнадцатеричного ответа. Есть ли у вас какие-либо идеи о том, как мне этого добиться? поиск не дал результатов, я не против использовать расширение, пока я могу отправить данные на страницу отладки