Выбор алгоритма шифрования

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Выбор алгоритма шифрования

Сообщение Maitris » 03.12.2006 (Вс) 12:57

Добрый день господа!
Наступил такой момент, что мне понадобилось применить шифрование в одном из своих проэктов, но не в целях защиты данных, а в целях защиты от бота-анализатора на сервере :)
Посоветуйте, что выбрать. Нужно чтобы было в стандартных средствах vb, и минимально ресурсов задействовало.
Может быть Base64? И как использовать.
----

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.12.2006 (Вс) 12:59

Что шифровать?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 12:59

Текст.
----

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.12.2006 (Вс) 13:31

Не очень понятно. Можно конкретный пример, что будет анализировать бот?

З.Ы. пример, исходник и даже готовый модуль для работы с base64 лежит на www.planet-source-code.com

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 13:35

Amed
Ключевые слова. Ничего более. Любая абракадабра подойдет, главное чтобы потом можно было привести это в нормальный вид :)
А есть что-нибудь встроенное в VB? Размер критичен.
----

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 03.12.2006 (Вс) 13:41

Оставляешь первую и последнюю буквы в слове прежними, а остальные перемешиваешь :)
И смысл не теряется, и бот обломится.
Лучший способ понять что-то самому — объяснить это другому.

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 13:47

Antonariy
Maitris писал(а):главное чтобы потом можно было привести это в нормальный вид

Мне нужен известный аглоритм, а не каша буковок
----

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 13:56

Осспади, а прибавить единицу к каждому символу подойдёт?
Вся реализация -- цикл из трёх строк.
Изображение

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 14:01

tyomitch, Это же в два раза увеличит размер данных! Нет, не подойдет.

В общем я так понял никаких встроенных средств в vb для шифрования строк нет, это так?
----

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.12.2006 (Вс) 14:06

Maitris, ты знаешь, +1 и &1 - это разные вещи...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 03.12.2006 (Вс) 14:13

Прибавляем к коду каждого символа еденицу, если код символа уже 255, то делаем его равным нулю. Обратно аналогично
[Место cдаётся]

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 14:24

GSerg, :oops: Я подумал он советует использовать еденицу в качестве сплиттера :) Тогда подойдет.
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 14:52

Если кому надо:

Код: Выделить всё

        Private Function Crypt(strText As String) As String
Dim strTemp As String
Dim i As Integer, j As Integer

    For i = 1 To Len(strText)
j = Asc(Mid(strText, i, 1))
  If j < 255 Then
strTemp = strTemp & Chr(j - 1)
  Else
strTemp = strTemp & Chr(255)
  End If
    Next i
Crypt = strTemp
        End Function
----

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 03.12.2006 (Вс) 15:02

Это простейший алгоритм. Можно придумать еще тыщу подобных (по сложности реализации) алгоритмов, которые не будут увеличивать объем выходной информации. Если для тебя критична скорость в столь нелегком деле запутывания бота, то достаточно просто "перевернуть" строку (или массив байт, что там у тебя). Можно менять местами два рядомстоящих символа. Да мало ли что можно придумать...
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 15:09

Maitris писал(а):Если кому надо:

Код: Выделить всё
        Private Function Crypt(strText As String) As String
Dim strTemp As String
Dim i As Integer, j As Integer

    For i = 1 To Len(strText)
j = Asc(Mid(strText, i, 1))
  If j < 255 Then
strTemp = strTemp & Chr(j - 1)
  Else
strTemp = strTemp & Chr(255)
  End If
    Next i
Crypt = strTemp
        End Function

Ну и куда этот код переведёт Chr(0) и Chr(255), соответственно?
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.12.2006 (Вс) 15:10

Форматирование функции особенно рулит :neutral:

А сам код ужасен.
Надо либо так
Код: Выделить всё
dim b() as byte, i as long

b=strconv(strText,vbfromunicode)
for i=lbound(b) to ubound(b)
  b(i)=(b(i)+1) mod 256
next
Crypt=strconv(b,vbunicode)
, либо так
Код: Выделить всё
dim i as long

Crypt=strText
for i=1 to len(crypt)
  mid$(crypt,i,1)=chr$((asc(mid$(strtext,i,1))+1) mod 256)
next
.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 15:15

GSerg писал(а):А сам код ужасен.

Как зло. :? Может и ужасен, но тем не менее работоспособен.
А что за ахтунг был? :) Повисает, обновляю, там три копии поста моего.
Нет кнопки удалить. Обновляю - появилась. Жму, подтверждение. "Вы можете удалять только свои посты". Возвращаюсь, еще раз жму удалить. "Тема к которой вы ...." не существует".
Последний раз редактировалось Maitris 03.12.2006 (Вс) 15:18, всего редактировалось 1 раз.
----

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 15:18

Maitris писал(а):
GSerg писал(а):А сам код ужасен.

Как зло. :? Может и ужасен, но тем не менее работоспособен.

Не-а. Я уже указал на баг.
Изображение

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 15:20

tyomitch
Ну так chr(0) это пустая строка, а chr(255) как был "я" так им и останется :) Я просто не придумал во что его можно перевести, если chr(0) это ничего.
----

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.12.2006 (Вс) 15:22

Maitris, а обратно 255 переводить в 254 или в 255? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 15:27

Maitris писал(а):Ну так chr(0) это пустая строка

Ага, а Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) -- это пустая строка из пяти символов? Или пять пустых строк, склеенные вместе? ;-)
Изображение

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 15:36

tyomitch писал(а):Или пять пустых строк, склеенные вместе?

Странно... У меня получается пустая строка (Len=0)
Добавление: в текстбоксе. Если в стринг загонять - то 5. Просвяти тогда что это? Лайн-брейк?

Добавление N2:
И правда, поиск рулит :)
BV писал(а):Chr$(0), он же vbNullChar - символ, но не имеющий знака...

Терминатор строки для использования в Api значит. Кул.
Последний раз редактировалось Maitris 03.12.2006 (Вс) 15:41, всего редактировалось 1 раз.
----

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.12.2006 (Вс) 15:41

Это нулевой символ :)
Файл тоже может быть забит 100 килобайтами нулей, к примеру. Но от этого он не станет пустым.

А как текстбокс нарисует нулевой символ? Это же не нолик :)

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 15:44

Amed
Я думал .Text textbox'а это точно такой же стринг, получается он фильтрует этот символ? Я же присваиваю его, а он не только не отображается, но и не считается по длине!
----

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 03.12.2006 (Вс) 15:47

Странно... У меня получается пустая строка (Len=0)
А по какому принципу вычисляется длинна строки? Считаются все сиволы по порядку начиная от начала строки до первого попавшегося нуль-символа. Естественно, что как строка, этот набор байт будет иметь нулевую длинну.
А я все практикую лечение травами...

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 03.12.2006 (Вс) 15:53

Twister
Тогда понятно :)
GSerg
Первый вариант не понимает символы кириллицы.
----

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.12.2006 (Вс) 15:54

Легко проверить.
Код: Выделить всё
Dim str As String, str2 As String

str = Chr(0) + "тратата" + Chr(0)
str2 = "тратата" + Chr(0)

Text1.Text = str
Debug.Print "Какая длина? " & Len(str) & vbCrLf & "Какая длина? " & Len(Text1.Text)
Text1.Text = str2
Debug.Print "А теперь? " & Len(str2) & vbCrLf & "А теперь? " & Len(Text1.Text)

Text в TextBox оканчивается на \0 = Chr(0).

Добавлено чуть позже:
Twister, в String'е длина не так вычисляется. Она хранится в отдельных байтах. Зацени пример :)
Последний раз редактировалось Amed 03.12.2006 (Вс) 16:03, всего редактировалось 1 раз.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 15:59

Twister писал(а):
Странно... У меня получается пустая строка (Len=0)
А по какому принципу вычисляется длинна строки? Считаются все сиволы по порядку начиная от начала строки до первого попавшегося нуль-символа. Естественно, что как строка, этот набор байт будет иметь нулевую длинну.

Это только в текстбоксе так. В стринге длина хранится отдельно, что позволяет склеить вместе пять пустых строк :-D
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 03.12.2006 (Вс) 16:04

Это только в текстбоксе так. В стринге длина хранится отдельно, что позволяет склеить вместе пять пустых строк
Да, без сомнения в VB строка и массив байт не одно и то же.
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 16:23

в VB строка и массив байт намного ближе друг к другу, чем в Сях, где Chr(0) -- ограничитель
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList