Задать вопрос
@davidnum95

Как переписать данный алгоритм на C#?

Добрый день. Есть некий алгоритм декрипта строки зашифрованной в base64 на adobe as3. Строка берется из поля arraybyte из файла в формате json. Суть не совсем понятна, поэтому просто решил в лоб переписал код на C#. На выходе должен получиться осмысленный текст, но выходят кракозябры.
Оригинальный код на adobe as3 полученный дизассемблером:
//сам алгоритм
private function descriptBFF(base64:String) : String
      {
         var s:String = "";
         var i:uint = 1;
         var length:uint = base64.charCodeAt(0);
         if(length % 2 == 1)
         {
            length--;
         }
         while(i < length)
         {
            s = s + (base64.charAt(i + 1) + base64.charAt(i));
            i = i + 2;
         }
         s = s + base64.slice(length + 2);
         return s;
      }

//его использование
 b64 = new Base64Decoder();
 b64.decode(this.descriptBFF(book.bytearray));

Моя реализация на C#:
//Алгоритм
public static string DecryptBFF(string base64) {
			string s = "";
			int i = 1;
			int lenght = (Int32)base64[0];
			
			if(lenght % 2 == 1) {
				lenght--;
			}
			
			while(i < lenght) {
				s = s + (base64[i + 1] + base64[i]);
				i = i + 2;
			}
			s = s + base64.Substring(lenght + 2);
         	return s;
		}
//Использование
byte[] data;
data = Convert.FromBase64String(DecryptBFF(book.Content));
book.Content = Encoding.UTF8.GetString(data);

Если кому интересно, могу JSON файл скинуть.
  • Вопрос задан
  • 525 просмотров
Подписаться 2 Оценить 4 комментария
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Подводя итоги обсуждения в комментариях.

bytearray - не содержит текст. Это тело файла Flash.

В строке:
s = s + (base64[i + 1] + base64[i]);

Следует работать с символами как со строками, а не кодами символов:
s = s + (base64[i + 1].ToString() + base64[i].ToString());


В остальном вроде ошибок нет. Код использования примерно такой:
byte[] data;
data = Convert.FromBase64String(DecryptBFF(book.Content));
File.WriteAllBytes("output.swf", data);

Файл output.swf можно открыть в проигрывателе Flash или браузере.

Будем надеяться, что все законно :-)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@vilgeforce
Раздолбай и программист
И зачем вы изобретаете велосипед с декодированием base64? Готового не найти что ли?
Ответ написан
vpuhoff
@vpuhoff
Программист в свободное от работы время
махинации вы повторили видимо чуть больше чем полностью, проблема скорее всего просто в кодировке, Encoding.UTF8.GetString(data);, кто сказал что там именно UTF8?) Вероятно нужно попробовать все подряд и одна из них вернет осмысленный текст
Ответ написан
@Giwinax
в итоге смогли разобраться, как декодировать эти кракозябры? сам сейчас над этой проблемой сижу, переписал функцию на плюсах, результат нулевой, меняется только первые ~100 символов файла ubff, последующие попытки прогнать через base64 не дали результатов, хотелось бы услышать ваше решение, если есть таковое
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы