Шестнадцатеричные значения внутри байта [] после ответа REST API POST - PullRequest
0 голосов
/ 30 мая 2018

У меня есть REST API, который обеспечивает шифрование и дешифрование Rijndael для строк и байтов [].

Я посылаю байт потока памяти [] в метод шифрования следующим образом:

public FileResult EncryptFile(IFormFile fileA){;
    List<IFormFile> fileList = new List<IFormFile> { fileA };
    string fileNameSet = "";
    Documents document = new Documents();
    foreach (var file in fileList) {
        if (file != null) {
            using (var ms = new MemoryStream()) {
                file.CopyTo(ms);
                byte[] fileBytes = APIUtilities.EncryptDecryptByteArray(EncryptionUtilities.Sharding.DataKey(), ms.ToArray(), "E");
                var fileName = Path.GetFileNameWithoutExtension(file.FileName);
                var fileExt = Path.GetExtension(file.FileName);
                document.DocumentFilename = fileName + '_' + DateTime.Now;
                document.Extension = fileExt;
                document.ContentType = file.ContentType;
                document.DateUploaded = DateTime.Now;
                document.DataStream = fileBytes;
                fileNameSet += document.DocumentFilename;
            }
        }
    }
    document.DataStream = APIUtilities.EncryptDecryptByteArray(EncryptionUtilities.Sharding.DataKey(), document.DataStream, "D");
    return File(document.DataStream, document.ContentType, document.DocumentFilename + document.Extension);
}

Я знаю, что расшифровываю байт [] сразу после его шифрования.Он структурирован для целей тестирования.

При шифровании и дешифровании файлов я отправляю сериализованный объект C #, структурированный следующим образом:

Crypto.CryptoFile obj = new Crypto.CryptoFile {
      Key = key,
      Type = type,
      Value = ms
}

, где свойство Value является байтом [] для шифрования /расшифровывается из потока памяти.

Я отправляю объект в API следующим образом:

using (HttpClient client = new HttpClient(handler)) {
    try {
        client.BaseAddress = new Uri(baseURL);
        var requestJson = JsonConvert.SerializeObject(obj);
        var content = new StringContent(requestJson);
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        var result = client.PostAsync("api/cryptofile", content).Result.Content.ReadAsStringAsync().Result;
        output = JsonConvert.DeserializeObject <Crypto.CryptoFile>(result);
        }
    catch (Exception ex) {
        if (ex.Message.Length > 0) {}
    }
}

API получает запрос следующим образом:

public class CryptoFileController : ApiController
{
    // POST api/cryptofile
    public Crypto.CryptoFile Post ([FromBody]Crypto.CryptoFile obj) {
        try {
            if (obj.Type == "E") {
                obj.Value = Encryption.Security.EncryptBytes(obj.Value, obj.Key);
            }
            else if (obj.Type == "D") {
                obj.Value = Encryption.Security.DecryptBytes(obj.Value, obj.Key);
            }
        }
        catch (Exception ex) {
            if (ex.Message.Length > 0) {}
        }
        return obj;
    }
}

encryption возвращает байт [], который успешно зашифрован.

При дешифровании я получаю байт [], который при дешифровании означает, что значения в массиве представлены в шестнадцатеричном формате, а не в исходном формате ASCII, предоставленном из потока памяти.В результате я получаю шестнадцатеричные значения в файле при его открытии вместо начальных значений файла.Если я возьму эти шестнадцатеричные значения в онлайн-конвертер ASCII, я смогу преобразовать шестнадцатеричные значения в исходные значения файла.

Можно ли получить начальные значения ASCII байтового массива после расшифровки?Не уверен, что мне не хватает в этом.Любая помощь будет высоко ценится, так как это проблема не только с текстовыми файлами, но и с другими типами файлов.

Заранее спасибо.

РЕДАКТИРОВАТЬ

Хотел показатьсодержимое файла до и после завершения процесса.

До: зашифровать этот файл, расшифровать этот файл

После: 456e 6372 7970 7420 7468 6973 2066 696c 652c 2044 6563 7279 7074 2074 68697320 6669 6c65 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

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

1 Ответ

0 голосов
/ 31 мая 2018

Проблема решена.Спасибо Скотту Чемберлену в комментариях, отметив, что программа решает, как интерпретировать и отображать данные с диска, так как я не знал, что Sublime отображает Hex-кодировку по умолчанию.В результате отредактировал настройки возвышенного состояния и проверил другие текстовые редакторы, чтобы подтвердить отсутствие проблем с шифрованием и API. Это была проблема, вызванная самим редактором.

Спасибо за все другие предложения, помощь, как всегда, приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...