довольно заурядно при шифровании aes-ecb, заранее извиняюсь.
Я пытаюсь выполнить API-вызов на сервере, которому требуется зашифрованная полезная нагрузка.
У меня небольшие проблемы с последовательностью, в которой я шифрую данные, конвертируемые между base64 и ascii.
Когда я запускаю приведенный ниже код, я продолжаю получать
Содержимое заголовка содержит недопустимые символы.
Я подозреваю, что это может быть способ, которым я конвертирую зашифрованные данные между типами, но не совсем уверен. Любые мысли будут по достоинству оценены.
var request = require("request");
var aesjs = require('aes-js');
var apiKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
var privateKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var method = 'GET';
var url = 'https://apiurl.com';
var agent = "app /1.0 Android/8.1.0 (Android)";
var options = {
method: method,
url: url,
headers:
{ 'X-API-KEY': apiKey,
'X-CSN-USER-AGENT': agent,
'apiData' : GetAndEncryptApiData(method, url)
}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
function GetAndEncryptApiData(method, url){
var isoTimestamp = new Date().toISOString();;
var text = `uri:${url} \nmethod:${method}\ntimestamp:${isoTimestamp}`;
var key = Buffer.from(privateKey, 'base64');
var aesEcb = new aesjs.ModeOfOperation.ecb(key);
var textToBytes = aesjs.utils.utf8.toBytes(text);
var paddedData = aesjs.padding.pkcs7.pad(textToBytes);
var encryptedData = aesEcb.encrypt(paddedData);
var output = Buffer.from(encryptedData).toString('ascii');
return output;
}