Нужен пример симметричного шифрования

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

Нужен пример симметричного шифрования

Сообщение aleksmir » 12.11.2010 (Пт) 5:18

Здравствуйте!

Пишу программу. Она должна сохранить пароль в текстовый файл и прочитать его из текстового файла.
Есть у кого-нибудь пример на VB симметричного шифрования (с одним закрытым ключом)?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Нужен пример симметричного шифрования

Сообщение Хакер » 12.11.2010 (Пт) 5:21

Xor.

Устранивает, нет? Если нет, говори, почему, и сразу же пиши список требований к шифрованию, которым должен удовлетворять предлагаемый алгоритм.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 12.11.2010 (Пт) 5:40

Хакер писал(а):Xor. Устранивает, нет? Если нет, говори, почему, и сразу же пиши список требований к шифрованию, которым должен удовлетворять предлагаемый алгоритм.


XOR - слишком слабый.

Список требований:
1. Нужно зашифровать короткий текст (примерно 10 символов).
2. Программа должна его зашифровать, с помощью ключа, который будет храниться в исходном коде.
3. Программа должна сохранить зашифрованный текст в файл ini (текстовый или двоичный - не важно).
4. Программа должна уметь прочитать зашифрованный текст из своего ini-файла, суметь расшифровать его с помощью того же ключа, хранящего в исходном коде.
5. Стойкость алгоритма шифрования должна быть достаточно высокой.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Нужен пример симметричного шифрования

Сообщение Хакер » 12.11.2010 (Пт) 5:45

aleksmir писал(а):XOR - слишком слабый.
1. Нужно зашифровать короткий текст (примерно 10 символов).
...
5. Стойкость алгоритма шифрования должна быть достаточно высокой.

Если зашифровать 10 байтов 10-байтным ключём, стойкость будет сверхвысокой. Будет сверхвысокое количество ключей, применение которых даёт резумный, но неправильный результат.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 12.11.2010 (Пт) 15:01

Хакер писал(а):
aleksmir писал(а):XOR - слишком слабый.
1. Нужно зашифровать короткий текст (примерно 10 символов).
...
5. Стойкость алгоритма шифрования должна быть достаточно высокой.

Если зашифровать 10 байтов 10-байтным ключём, стойкость будет сверхвысокой. Будет сверхвысокое количество ключей, применение которых даёт резумный, но неправильный результат.


Я не знал. Если так, то конечно подойдёт! У вас есть пример?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Нужен пример симметричного шифрования

Сообщение alibek » 12.11.2010 (Пт) 16:04

Пример чего? XOR-шифрования?
Lasciate ogni speranza, voi ch'entrate.

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

Re: Нужен пример симметричного шифрования

Сообщение Antonariy » 12.11.2010 (Пт) 18:39

5. Стойкость алгоритма шифрования должна быть достаточно высокой.
Феерично бесполезное требование при хранении ключа в теле программы.
Какая разница, насколько сложен замок, если ключ под ковриком?
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Нужен пример симметричного шифрования

Сообщение Хакер » 12.11.2010 (Пт) 18:42

Antonariy писал(а):Феерично бесполезное требование при хранении ключа в теле программы.

Может быть программа в безопасной зоне, а зашифрованный файл нужно передать по небезопасной?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 13.11.2010 (Сб) 5:34

alibek писал(а):Пример чего? XOR-шифрования?


Да. На VB.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 13.11.2010 (Сб) 5:46

Нашёл пример тут: Re: Дешифровка и шифровка по XOR

Только в нём от размера ключа ничего не меняется:

Код: Выделить всё
Private Sub Primer()
  Dim cod As String
  Dim key As String
  Dim t As String
  Dim i As Integer
  Dim keyb As Integer
  cod = "text 123 456"
  key = "1234567890"
  keyb = Asc(key)
  t = ""
  For i = 1 To Len(cod)
      t = t & Chr$(Asc(Mid$(cod, i, 1)) Xor (keyb))
  Next i
  MsgBox t
  cod = ""
  For i = 1 To Len(t)
      cod = cod & Chr$(Asc(Mid(t, i, 1)) Xor (keyb))
  Next i
  MsgBox cod
End Sub


Ну принцип понял. Доработаю. Спасибо!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Нужен пример симметричного шифрования

Сообщение alibek » 13.11.2010 (Сб) 11:05

Что по-твоему делают эти строки?
Код: Выделить всё
key = "1234567890"
keyb = Asc(key)
Lasciate ogni speranza, voi ch'entrate.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Нужен пример симметричного шифрования

Сообщение NashRus » 13.11.2010 (Сб) 22:19

alibek писал(а):Что по-твоему делают эти строки?


Действительно, что делают, и почему длина key только 10 символов, если надо минимум 1998.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 14.11.2010 (Вс) 1:01

alibek писал(а):Что по-твоему делают эти строки?
Код: Выделить всё
key = "1234567890"
keyb = Asc(key)


Первая строка присваивает переменной key текстовое значение "1234567890".
Вторая строка записывает в переменную keyb ASCII-код первого символа строки key, т.е. 49.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 14.11.2010 (Вс) 1:04

NashRus писал(а):если надо минимум 1998.


А какой принцип, расскажите? Почему 1998?

Взять ключ и первый символ ключа сделать XOR с первым символом текста, потом 2-е символы также, потом 3-и и так, пока текст не кончится, или пока ключ не кончится. Если длина строки больше 1998, то потом символы ключа перебираем с первого? Так?

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 14.11.2010 (Вс) 1:53

Сделал, работает. Но уже сам вижу, что такой шифр легко ломается подбором. Зная первый символ, перебором всех символов находим символ, который даст первый символ шифра. Потом второй символ и т.д. Даже если длина ключа 1998, для одного компьютера это пустяк 1998*255 = 509490 вариантов.

Или я что-то сделал не так?:

Код: Выделить всё
' ФУНКЦИЯ: шифровка по XOR
' strText - исходный текст
' Возвращает зашифрованную (расшифрованную) строку
Public Function EncodeXOR(strText As String) As String
  ' Переменные: значения
    Dim strLine As String     ' исходная строка
    Dim strRes As String      ' строка результата
    Dim strKey As String      ' ключ
    Dim intLenText As Integer ' длина текста
    Dim intLenKey As Integer  ' длина ключа
    Dim intText As Integer    ' счётчик символов текста
    Dim intKey As Integer     ' счётчик символов ключа
  ' Код
    ' определение исходной строки
    strLine = VBA.Trim(strText)
    ' инициализация строки результата
    strRes = ""
    ' инициализация ключа
    strKey = "fghfghe5ttergdfgdfg34534terergdfgdfcvbcvdgert345345345tergdfhg567rthad345wtrhydfhjghje546y7e45ty34523regdfg"
    ' определение длины текста
    intLenText = VBA.Len(strText)
    ' определение длины ключа
    intLenKey = VBA.Len(strKey)
    ' заполнение исходной строки до длины ключа
    If intLenText < intLenKey Then
      ' добавление пробелов
      For intText = intLenText + 1 To intLenKey
        strLine = strLine & " "
      Next
      ' переопределение длины текста
      intLenText = intLenKey
    End If
    ' инициализация счётчика ключа
    intKey = 1
    ' выполнение XOR
    For intText = 1 To intLenText
      ' выполнение XOR
      strRes = strRes & VBA.Chr$(VBA.Asc(VBA.Mid$(strLine, intText, 1)) Xor (VBA.Asc(VBA.Mid(strKey, intKey, 1))))
      ' увеличение счетчика ключа
      intKey = intKey + 1
      ' сброс счетчика ключа
      If intKey > intLenKey Then intKey = 1
    Next
    ' сохранение результата
    EncodeXOR = VBA.Trim(strRes)
End Function

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Нужен пример симметричного шифрования

Сообщение Хакер » 14.11.2010 (Вс) 6:05

aleksmir писал(а):Зная первый символ, перебором всех символов находим символ, который даст первый символ шифра.

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

Однако, если знать 10 неправильных ответов, можно подобрать 10 неправильных кодов, которые дадут такие ответы. И только знание правильного кода даст правильный ответ.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Нужен пример симметричного шифрования

Сообщение Diamock » 14.11.2010 (Вс) 6:18

Пользуюсь найденным примером
Шифрование по алгоритму RC4
Код: Выделить всё
Option Explicit

Dim s(0 To 255) As Integer
Dim kep(0 To 255) As Integer



Public Function EnDeCrypt(plaintxt As String, Password As String) As String

     Dim temp As Integer
     Dim a As Integer
     Dim b As Integer
     Dim cipherby As Byte
     Dim cipher As String

     'Инициализация

     'Создание ключа

     b = 0

     For a = 0 To 255
         b = b + 1
         If b > Len(Password) Then
             b = 1
         End If
         kep(a) = Asc(Mid$(Password, b, 1))
     Next a

     For a = 0 To 255
         s(a) = a
     Next a

     b = 0

     For a = 0 To 255
         b = (b + s(a) + kep(a)) Mod 256
         temp = s(a)
         s(a) = s(b)
         s(b) = temp
     Next a

     'Побайтное шифрование

     For a = 1 To Len(plaintxt)
         cipherby = EnDeCryptSingle(Asc(Mid$(plaintxt, a, 1)))
         cipher = cipher & Chr(cipherby)
     Next

     EnDeCrypt = cipher

End Function

Private Function EnDeCryptSingle(plainbyte As Byte) As Byte

     Dim i As Integer
     Dim j As Integer
     Dim temp As Integer
     Dim k As Integer
     Dim cipherby As Byte

     'Шифрование одного байта
     i = (i + 1) Mod 256
     j = (j + s(i)) Mod 256
     temp = s(i)
     s(i) = s(j)
     s(j) = temp
     k = s((s(i) + s(j)) Mod 256)
     cipherby = plainbyte Xor k
     EnDeCryptSingle = cipherby

End Function
In der Beschrankung zeigt sich erst der Meister
Графоманю...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Нужен пример симметричного шифрования

Сообщение alibek » 14.11.2010 (Вс) 9:58

aleksmir писал(а):Первая строка присваивает переменной key текстовое значение "1234567890".
Вторая строка записывает в переменную keyb ASCII-код первого символа строки key, т.е. 49.

То есть ты не понял, что ты используешь ключ длиною 1 байт, вне зависимости от того, что у тебя в key?
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 14.11.2010 (Вс) 17:44

alibek писал(а):То есть ты не понял, что ты используешь ключ длиною 1 байт, вне зависимости от того, что у тебя в key?


Понял, почему не понял? Я же привёл следом исправленный исходный код, который уже зависит от длины ключа.

P.S.: нашёл в интернете ещё такую статью как раз про мой случай: Защита данных файлов, содержащих информацию о настройках программы на примере работы с данными INI. Практикум на примерах, но пока не читал, уж очень длинная.

Diamock писал(а):Пользуюсь найденным примером
Шифрование по алгоритму RC4


Спасибо большое, Diamock! Наконец-то в теме появился пример на эту тему.

Хакер писал(а):Однако, если знать 10 неправильных ответов, можно подобрать 10 неправильных кодов, которые дадут такие ответы. И только знание правильного кода даст правильный ответ.


Блин, а как сделать 10 неправильных ответов?... Сделать 10 ключей, только один из которых правильный и десять раз записать один и тот же шифр, зашифрованный разными ключами. Так наверное.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Нужен пример симметричного шифрования

Сообщение Хакер » 14.11.2010 (Вс) 18:07

aleksmir писал(а):Блин, а как сделать 10 неправильных ответов?...

Блин, ты что, настолько «умный»?

Для порно-фильма можно подобрать такой шифр, который на выходе даст «Войну и мир», а можно такой, который даст «Преступление и наказание». Можно подобрать великое количество кодов, которое даст просто мусор.

И лишь обладание правильным шифром сделает из порнофильма исходники Windows.

Если целевая информация содержит в себе признаки, которые могут указать на то, что полученные данные являются правильной расшифровкой — тогда Xor не стоек. Если целевая информация не содержит в себе признака, по которому можно отличить правильную информацию от неправильной, тогда Xor стоек.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Нужен пример симметричного шифрования

Сообщение iGrok » 14.11.2010 (Вс) 18:11

Тут вопрос в другом.
Если у человека нет доступа к шифрующему ПО, то XOR со случайным ключом большей длины, чем сообщение - это почти 100% гарантия безопасности.
Если при этом ещё и ключи используются всего по одному разу, то мы получаем 100% гарантию - "одноразовый блокнот", который не ломается по определению.

Если у человека есть доступ к шифрующему ПО, то он даже при использовании более серьёзного алгоритма сможет этот алгоритм отреверсить, и сделать дешифровщик. Если речь идёт о хранении настроек ПО (пароля пользователя, например), то защита любым симметричным алгоритмом работает только "от лоха". Т.е. у потенциального взломщика есть в наличии всё необходимое - пример алгоритма (в скомпилированном виде, да, но это не большая проблема), и ключ (он же тоже зашит в программу). Вероятность взлома будет определяться только отношением сложности алгоритма к квалификации реверсера.

Для защиты "от лоха" же хватит и ксора с длинным ключём.
label:
cli
jmp label

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Нужен пример симметричного шифрования

Сообщение alibek » 14.11.2010 (Вс) 20:04

aleksmir писал(а):Понял, почему не понял? Я же привёл следом исправленный исходный код, который уже зависит от длины ключа.

Не похоже, что ты понял.
Потому что если длина ключа равна длине текста, то алгоритм шифрования не имеет значения.
Ты можешь использовать даже алгоритм для шифрования encrypt=0 (а для расшифровки соответственно decrypt=key[i]), если место хранения ключа считать безопасным.
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Нужен пример симметричного шифрования

Сообщение aleksmir » 22.11.2010 (Пн) 5:42

В принципе XOR подошёл. Спасибо!


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

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

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

    TopList  
cron