FreeBasic
Главная
Вход
Регистрация
Вторник, 23.04.2024, 14:55Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » AESDecoder баг? (AESDecoder баг?)
AESDecoder баг?
SKДата: Вторник, 19.06.2012, 13:08 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Привет! Решил попробовать библиотеку и создать небольшую прогу-кодировщик. Но че-то AESDecoder иногда возвращает неправильно раскодированные строки. sad

P.S. Можно ли отключить капчу при написании сообщений? Неудобно очень...


Сообщение отредактировал SK - Вторник, 19.06.2012, 13:10
 
haavДата: Вторник, 19.06.2012, 14:58 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (SK)
Привет! Решил попробовать библиотеку и создать небольшую прогу-кодировщик. Но че-то AESDecoder иногда возвращает неправильно раскодированные строки.


А можно поподробнее, а лучше пример.

Quote
P.S. Можно ли отключить капчу при написании сообщений? Неудобно очень...


Вроде отключил, но не уверен. Если что пишите. Хотя если спам-роботы начнут пакостить включу опять.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
SKДата: Среда, 20.06.2012, 11:17 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Просто в цикле запусти любой пример кодировки и раскодировки. Но при этом в ключе используй разные символы chr(0)..chr(254). Более того возвращаемая строка длиннее чем исходная.

P.S. Без капчи как-то лучше smile .
 
haavДата: Среда, 20.06.2012, 13:33 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (SK)
Просто в цикле запусти любой пример кодировки и раскодировки. Но при этом в ключе используй разные символы chr(0)..chr(254). Более того возвращаемая строка длиннее чем исходная.


Да, действительно, надо смотреть.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
SKДата: Воскресенье, 01.07.2012, 19:17 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Ну как дела, есть успехи?
 
haavДата: Воскресенье, 01.07.2012, 21:59 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (SK)
Ну как дела, есть успехи?


Вроде исправил, но пока обновление не спешу делать. Если очень надо пиши, выложу саму либу.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
SKДата: Суббота, 21.07.2012, 21:33 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Quote
Вроде исправил, но пока обновление не спешу делать. Если очень надо пиши, выложу саму либу.


Нееее я не спешу
 
ShadExДата: Воскресенье, 23.09.2012, 21:17 | Сообщение # 8
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Quote
Более того возвращаемая строка длиннее чем исходная.


При кодировании на AES входящий буфер кодируется поблочно, поэтому в конце добавляются нулевые байты. Я бы не советовал их отсекать, потому что если для строк это некритично, то для бинарного буффера, где в конце тоже могут быть нулевые байты, наверно лучше всего добавлять в конец 8-ми байтовую метку для сохранения длины входного буфера и отсекать лишнее после декодирования.
 
haavДата: Четверг, 27.09.2012, 16:52 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (ShadEx)
При кодировании на AES входящий буфер кодируется поблочно, поэтому в конце добавляются нулевые байты. Я бы не советовал их отсекать, потому что если для строк это некритично, то для бинарного буффера, где в конце тоже могут быть нулевые байты, наверно лучше всего добавлять в конец 8-ми байтовую метку для сохранения длины входного буфера и отсекать лишнее после декодирования.


Да , пожалуй вы правы. Надо переделать.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Четверг, 27.09.2012, 19:57 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
В общем сделал возврат всего буфера (неважно сколько нулевых символов в нем ). До этого было только до первого нуля.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Четверг, 27.09.2012, 23:00 | Сообщение # 11
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
A первый входной параметр какого типа - переписан на Zstring Ptr или оставлен String?

P.S.: если для тебя это не принципиально, то можно ко мне на обращаться "ты"


Сообщение отредактировал ShadEx - Четверг, 27.09.2012, 23:15
 
haavДата: Пятница, 28.09.2012, 06:41 | Сообщение # 12
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (ShadEx)
A первый входной параметр какого типа - переписан на Zstring Ptr или оставлен String?


Оставлен String. Я не пробовал, но мне кажется если изменить входные параметры на Zstring , то функция может принять не весь буфер, ведь в кодированных строках велика вероятность встречи нулей по середине буфера. Я пробовал разные варианты возврата значений, каждый из них в чем нибудь да не нравится. Остановился на том, чтобы возврат был с лишними нулями. Ведь при криптовке как я понял буфер округляется до границы 16 байт. То есть если меньше , то остальное забивается нулями, если больше 16 , то буфер вырастает еще на 16 байт. Для тех кто использует функции, просто должен сам регулировать длину конечного буфера по начальному размеру.

Это не мой код. Я лишь прицепил к ним свои оберки. Если честно, для меня выгоднее бы было , если бы функции AES работали не с типом String, а просто с определенным буфером байт. Но да ладно как есть уж.

Quote (ShadEx)
P.S.: если для тебя это не принципиально, то можно ко мне на обращаться "ты"


Хорошо.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Пятница, 28.09.2012, 08:15 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Хотел переписать код с помощью WINAPI , но передумал из-за скорости работы... Я тестировал по времени код криптовки AESENCODER и код на WINAPI (CryptCreateHash, CryptHashData и пр.) правда там алгоритм используется SHA1

Результаты ошеломили :

ДЛЯ WINAPI (SHA1): 4.5 секунды
Для AESENCODER 0.5 секунды

Может конечно если WINAPI код переписать с помощью алгоритма AES будет меньший результат, но что-то мне подсказывет, что все равно результат будет хуже чем у AESENCODER


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Суббота, 29.09.2012, 00:21 | Сообщение # 14
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Ну со String же не все так просто - любое действие(вывод через указатель, запись в файл) приводит к отсечению нулевых байтов:

Code
Shell "chcp 1251"
Dim As String str_0 = "aaa" & Chr(0) &Chr(0) &Chr(0) & "bbb" & Chr(0)   

Chr(0) & Chr(0)   
Var byte_0 = StrPtr(str_0)
? "Тест вывода ZERO: " & Chr(0)

? str_0
? Len(str_0)
? *byte_0
? Len(*byte_0)
Sleep : End


Я полез в исходник - код действительно компактный, но все под тип String "заточено", особенно удивил возврат с бипом smile -
Code
If ed < 1 Or ed > 2 Then
    Beep
    Return "ERROR - NO SUCH ENCRYPTION MODE"
Endif


Я когда переписывал с Си алгоритм base64, то сразу передавал в параметре тип Byte Ptr через ByRef, а функции возвращали размер кодированого буфера.

Надо будет как нибудь на досуге попытатся переписать под входной тип байтового массива.


Сообщение отредактировал ShadEx - Суббота, 29.09.2012, 00:22
 
haavДата: Суббота, 29.09.2012, 07:50 | Сообщение # 15
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Я точно не знаю, но мне кажется STRPTR создает тип Zstring ptr. В случае с типом STRING я бы прошлый пример переписал так:

Code
Dim As String str_0 = "aaa" & Chr(0) &Chr(0) &Chr(0) & "bbb" & Chr(0)
  var byte_0 = @str_0
  ? "Test input ZERO: " & Chr(0)  
  ? str_0  
  ? Len(str_0)  
  ? *byte_0  
  ? Len(*byte_0)  
  Sleep : End


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » AESDecoder баг? (AESDecoder баг?)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: