Алгоритм шифрования

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
8Ball's
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.12.2006 (Вт) 16:10
Откуда: Питер

Алгоритм шифрования

Сообщение 8Ball's » 07.01.2007 (Вс) 15:51

Скачал откуда-то алгоритм шифрования текста по ключу (Pass) через Xor
Код: Выделить всё
Public Const Pass = "P@sSwoRd123456789"

Dim Ky() As Byte
Dim Mx As Integer
Dim KeyMap() As Byte
Private Const MaxStringLength = 65536 'максимальная длинна текста

Sub InitCryptMap()
    On Error Resume Next
    Ky = StrConv(Pass, vbFromUnicode)
    Mx = UBound(Ky) + 1
    ReDim KeyMap(MaxStringLength - 1)
    For i = 0 To MaxStringLength - 1
        KeyMap(i) = Ky(i Mod Mx)
    Next
    Mx = Mx - 1
End Sub

Function Compile$(ByRef AnyString As String)
    Dim i& , Cs() As Byte
    Cs = StrConv(AnyString, vbFromUnicode)
    For i = 0 To UBound(Cs)
        Cs(i) = Cs(i) Xor KeyMap(i)
    Next
    Compile = StrConv(Cs, vbUnicode)
End Function


ругается на строку: Cs(i) = Cs(i) Xor KeyMap(i)
подскажите что делать
Изображение

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

Сообщение Amed » 07.01.2007 (Вс) 15:58

Option Explicit поставь в самом верху кода.

8Ball's
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.12.2006 (Вт) 16:10
Откуда: Питер

Сообщение 8Ball's » 07.01.2007 (Вс) 16:01

абсолютно ничего не изменилось Run time error '9'
Изображение

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

Сообщение Amed » 07.01.2007 (Вс) 16:05

Сначала надо вызывать InitCryptMap, и только потом Compile.

Если не вызвать сначала InitCryptMap, то под динамический массив KeyMap() As Byte не будет отведено место в памяти, и он будет нулевой.

Небольшая поправка
Немного о жизненном цикле динамических массивов.
Все массивы в VB являются SAFEARRAY (см. статью). Именно в структуре SAFEARRAY хранится размерность массива и указатель на данные массива.
При объявлении динамического массива, например: ...
Код: Выделить всё
Dim a () As Long

...указатель на SAFEARRAY нулевой, то есть массива вообще нет и в помине (нет структуры SAFEARRAY, нет и указателя на данные).
Таким образом, правильнее говорить
Если не вызвать сначала InitCryptMap, то динамический массив KeyMap() As Byte не будет существовать
Последний раз редактировалось Amed 07.01.2007 (Вс) 16:39, всего редактировалось 3 раз(а).

8Ball's
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.12.2006 (Вт) 16:10
Откуда: Питер

Сообщение 8Ball's » 07.01.2007 (Вс) 16:06

Теперь почти работает, но шифруется только первый символ строки AnyString :( Как это исправить? ПОМОГИТЕ ПОЖАЛУСТА! Я в массивах плохо разбираюсь!
Изображение

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 07.01.2007 (Вс) 22:05

Ну для начала убери обработчик ошибок, заремив его - 'On Error Resume Next
И сам увидешь причину :wink:
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

8Ball's
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.12.2006 (Вт) 16:10
Откуда: Питер

Сообщение 8Ball's » 07.01.2007 (Вс) 23:18

Спасибо JohnK!
Всего навсего переменная типа Integer не может иметь такое большое значение как 65536!
Изображение


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

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

Сейчас этот форум просматривают: Google-бот и гости: 100

    TopList