Добрый вечер всем. Недавно напоролся на глюк не знаю какого уровня. Нужно мне было реализовать тривиальное шифрование с использованием перестановки через mod Простейший случай выглядит так Private Sub Command1_Click() Dim a, b, c As Byte a = 250 b = 240 c = (a + b) Mod 255 End Sub И работает. А я сделал чут более респектабельную штуку tmpByte = (SourceFile.Bits(i) + NextByte) Mod 255 все переменные типа байт, SourceFile.Bits(i) - динамический масив ( с ним глюков нет, тестировал его с более тривиальными операциями). Когда запускаю свою строку выскакивает ошибка №6 - переполнение. Где собака зарыта. Пробовал деалать для tmpByte тип интеджер а потом конвертировать в байт - все равно падает. Как выкрутится?
В этой переменной байт сгенерированный генератором (от 0 до 255), я отладчиком проверял, бряки ставил, все значения в пределах нормы (i, nextbyte,bits(i)), а результат операции все равно не получается. У меня эта команда в цикле, но падает после первого прогона при i=0. Масив нормальный, если использовать xor, то работает а mod - падает.
rodger Выложи рабочий пример, который у тебя падает (проект целиком), тогда можно будет проверить. Кстати у тебя a и b в такой записи определены как Variant, а не Byte.
Спасибо (тебе и всем другим неравнодушным) за желание ковырятся в чужих исходниках. Проблему решил. Дело в том что a,b вообще не нужны в этой программе и не используются вообще, я их просто написал в тестовом примере, и к главной программе они не имеют никакого отношения, но ты меня подтолкнул на правильную мысль, обьявить их локально в процедуре шифрования, а потом заменить ними мои стандарные переменные. Сделал так a = SourceFile.Bits(i) b = NextByte SourceFile.Bits(i) = (a + b) Mod 255 А глюк был даже не с mod а при сложении байт, это я выяснил когда разделял операцию постройчно. Потом эксперементировал с типом переменной в которую буду заганять результат, дошел до тпа single, а толку - ноль. Теперь появился новый вопрос:если есть три алгоритмы шифрования 1)SourceFile.Bits(i) = (a + b) Mod 255 2)SourceFile.Bits(i) = ((a Xor b) + NextByte) Mod 255 3)SourceFile.Bits(i) = ((a + b) Mod 255) Xor b то как их расшифровывать 1)SourceFile.Bits(i) = (a - b) Mod 255 ? 2)SourceFile.Bits(i) = ((a - b) Mod 255) Xor b ? 3)SourceFile.Bits(i) = ((a Xor b) - b) Mod 255 ? ибо часто получается результат отрицательный, что протевоестественно для типа байт. По модуля брать или местами отдельные операции поменять?
Народ, вы с ума сошли, простите за прямоту . Это же клинопись Бейсика! rodger Топай сюда. Отличный сайт про Бейсик.
Про "шифрование" все-таки еще отвечу Операция сложения по модулю, равно как и XOR, тривиально обратимы. Ты все расписал правильно, а отрицательный результат получается потому, что большинство языков программирования - VB не исключение - написаны людьми достаточно далекими от математики. И mod для отрицательных чисел обычно вычисляет что угодно, только не то, что должно. Придется самому исправлять (по типу -2 mod 5 = 5 - 2 = 3)
"шифрованием" пиршлось занятся по заказу, сам знаю что это не серйозно но тем не менее. Выкручивался таким образом If a - b >= 0 Then SourceFile.Bits(i) = a - b Else SourceFile.Bits(i) = a + 255 - b End If и If (a Xor b) - b >= 0 Then SourceFile.Bits(i) = (a Xor b) - b Else SourceFile.Bits(i) = (a Xor b) + 255 - b End If других вариантов расшифровки не было, и то местами глючит, ладно разберусь. А если говорить про клинопись, и некро***, то господа бывают в жизни каждого моменты, когда хочется в отпуск, или просто ничего не далать, просто заматываешся и перестаеш понимать тривиальные вещи, а сроки поджимают, поэтому и спрашиваю в таком ключе. Я перед этим нарыл в нете несколько мегабайт инфы на эту тему сисходниками, но в таком состоянии анализ не пошел. Так что выкручиваюсь опытным путем. Всем удачи.
Диагноз не совсем правильный, а за линк спасибо, я скачал три исходника по криптографии. А вообще Бейсик язык бажный.
Если спешишь и башка не о том думает, зачем с васиком связываться? Пиши на С или на фасме. Алгов - море. И уважение от людей. А насчет клинописи и каракулей, то тут на сайте банят за матершину от васика. Сейчас вот обсуждается вопрос, а не считать-ли дельфу матершиной? Вот-вот. Сами говорите. A зачем себя лажными языками унижать? ВАСМ - это солидно. Этим гордятся. васик - так, шпана. По подвалам дихлофос нюхает..
С бейсиком связался не по своей воле, моя задача состояла в том гтобы закончить проэкт, написан лихо, процентов на 50 на API-шних функциях, только сыроватый чуток. Моя задача была наполнить его функциональностью + разобратся с глюками. Иногда приходится вообще на VBA программировать, под outlook, access, так это все равно что пластиковой вилкой окоп рыть, вроде гламурно, но очень жестоко, так приходится выворачиватся. А делфу матерщиной считать не стоит, она более стабильна нежели ВБ, + поддержка встроенного АСМ-а.