Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Исходный код шифрования текста универсальным алгоритмом.

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

DemakVik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
Private Sub zasS_S_Rand(ByRef textIsxod As String, ByRef textRez As String, ByRef ChifrVxod As Short, ByRef RotorVxod As Short, ByRef NomerVxod1 As Integer, ByRef NomerVxod2 As Integer, ByRef BazisVxod As String, ByRef OblikVxod As String, ByRef ChaosVxod() As UShort, Optional ByRef LocalBB As Short = 1)
Dim J0 As Integer, J1 As Integer, Ich0 As Integer, Ich1 As Integer, Ich2 As Integer, DlinaIsxod As Integer
Dim L0 As String, DlinaBazis As UShort, DlinaChaos As Integer, DlinaNomer As Integer, DlinaProgres As Short
Dim AdresBazis As Integer, AdresOblik As Integer, AdresChaos As Integer, Ichet As Integer, Ipro As Short
Dim Simvol As Char, Lbuilder As New System.Text.StringBuilder("")
Dim Progres1 As Integer
'Процедура на языке Visual Basic 9.0 (Visual Basic 2008) Все параметры передаются по ссылке, так как тексты в виде строк могут быть очень большими.
'Типы данных:
'Byte = От 0 до 255 (беззнаковый). Один байт
'Short = От –32 768 до 32 767 (знаковый). Два байта.
'Integer = От –2 147 483 648 до 2 147 483 647 (знаковый). 4 байта.
'Long = От –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 (9,2... E+18 †) (знаковый). 8 байтов.
'String = От 0 до приблизительно 2 миллиардов знаков в кодировке Юникод.
'USort = От 0 до 65 535 (беззнаковый). Два байта.
'Char = От 0 до 65535 (беззнаковый). Два байта.
'System.Text.StringBuilder("") - инструмент VB9 для работы со строками переменной длины. Обычные инструменты работы со строками при любом изменении строки создают новую строку. При больших строках это очень сильно замедляет вычисления. Новый инструмент чрезвычайно быстро производит операции со строками.
 
'Шифрование текста в виде строки. Алфавит символьный - строка символов BazisVxod с адресами от 1 до 65535, второй алфавит строка символов OblokVxod с адресами от 1 до 65535, вектор чисел - ChaosVxod() с адресами от 0 до 65535
'Вход: textIsxod     - исходный текст в виде строки символов, который нужно зашифровать или расшифровать с адресами от 1 до DlinaIsxod
'      textRez       - результат шифрования строки символов textIsxod с адресами от 1 до DlinaIsxod  
'      NomerVxod1    - номер первого символа в тексте textIsxod, подлежащий шифрованию, отсчет с 1
'      NomerVxod2    - номер последнего символа в тексте textIsxod, подлежащий шифрованию, отсчет с 1
'      LocalBB       - учет относительного влияния порядка отсчета чисел вектора. Результаты шифрования различны при различных значения параметра.
'                    = 0 - отсчет ведется с начала textRez
'                    = 1 - отсчет ведется от NomerVxod1 до NomerVxod2
'                    = 2 - отсчет ведется по BazisVxod от 1 до DlinaBazis+1
'Параметры шифрования:  
'      ChifrVxod = 0 - расшифровать textIsxod, 1 - зашифровать textIsxod, понятие расшифровать и зашифровать выбрано произвольно. Можно расшифровывать, а восстанавливать, зашифровывая.
'      RotorVxod = 0 - левое вращение, 1 - правое вращение. Результаты шифрования абсолютно различны, в лучшем случае совпадает один символ в середине.
'      BazisVxod - алфавит символьный в виде строки - перечень символов в textIsxod, подлежащих шифрованию, индекс с 1. Количество символов от 2 до 65535. Все символы должны быть различными. Символы, не входящие в BazisVxod, копируются из textIsxod в textRez без изменения. Длина BazisVxod равна DlinaBazis, изменяется от 2 до 65535.
'      OblikVxod - второй символьный алфавит, отличается от первого только порядком следования одних и тех же символов. Может быть равен первому.
'      ChaosVxod() - вектор чисел от 1 до длины BazisVxod. Количество чисел в векторе может быть от 1 до длины textIsxod по выбору пользователя. Числа в векторе - произвольные из области значений. Например, длина вектора = 3. Это означает, что в векторе 3 числа: 1)Первое от 1 до DlinaBazis. 2)Второе от 1 до DlinaBazis, может быть равно первому. Третье от 1 до DlinaBazis, может быть равное первому или второму.
 
'DlinaProgres = 100            'Параметр для индикатора отображения выполняемой операции
'ProgressBar1.Maximum = 100    'Параметр для индикатора отображения выполняемой операции
'Progres1 = 100000             'Параметр для индикатора отображения выполняемой операции
DlinaBazis = Len(BazisVxod)         'Длина первого алфавита, количество символов
DlinaChaos = UBound(ChaosVxod) + 1  'Длина вектора, количество чисел
Ich0 = NomerVxod1 - 1: Ich1 = 0: Ich2 = 0
DlinaIsxod = Len(textIsxod)         'Длина текста, подлежащего шифрованию
Lbuilder.Capacity = DlinaIsxod
'Копирование не шифруемой начальной части текста без изменения
For J0 = 1 to NomerVxod1 - 1
  Simvol = Mid(textIsxod, J0, 1)
  Lbuilder.Append(Simvol, 1)
Next  
 
DlinaNomer = NomerVxod2 - NomerVxod1 + 1
Ichet = 0
Select Case ChifrVxod
Case 0  'Расшифровать
  For J0 = NomerVxod1 To NomerVxod2
    Ich0 = Ich0 + 1
    Ich1 = Ich1 + 1
    L0 = Mid(textIsxod, J0, 1)
    AdresOblik = InStr(OblikVxod, L0)
    Select Case RotorVxod
    Case 0
      Select Case AdresOblik
      Case 0
        'Если символ отсутствует в алфавите, то копируется в результат без изменения
        If L0 <> Nothing Then Simvol = L0: Lbuilder.Append(Simvol, 1)
      Case Else
        Ich2 = Ich2 + 1
        Select Case LocalBB
        Case 0
          J1 = Ich0 Mod DlinaChaos
        Case 1
          J1 = Ich1 Mod DlinaChaos
        Case 2
          J1 = Ich2 Mod DlinaChaos
        Case Else
        End Select
        AdresChaos = ChaosVxod(J1)
        AdresBazis = AdresOblik + AdresChaos
        If AdresBazis > DlinaBazis Then AdresBazis = AdresBazis - DlinaBazis
        Simvol = Mid(BazisVxod, AdresBazis, 1)
        Lbuilder.Append(Simvol, 1)
      End Select
    Case Else
      Select Case AdresOblik
      Case 0
        'Если символ отсутствует в алфавите, то копируется в результат без изменения
        If L0 <> Nothing Then Simvol = L0: Lbuilder.Append(Simvol, 1)
      Case Else
        Ich2 = Ich2 + 1
        Select Case LocalBB
        Case 0
          J1 = Ich0 Mod DlinaChaos
        Case 1
          J1 = Ich1 Mod DlinaChaos
        Case 2
          J1 = Ich2 Mod DlinaChaos
        Case Else
        End Select
        AdresChaos = ChaosVxod(J1)
        AdresBazis = AdresOblik - AdresChaos
        If AdresBazis < 1 Then AdresBazis = AdresBazis + DlinaBazis
        Simvol = Mid(BazisVxod, AdresBazis, 1)
        Lbuilder.Append(Simvol, 1)
      End Select
    End Select
    'Необязательная часть
    'Ichet = Ichet + 1
    'If Ichet = Progres1 Then  
    '   Ipro = Int(((J0 - NomerVxod1 + 1) / (DlinaNomer)) * DlinaProgres): Ichet = 0
    '   ProgressBar1.Value = Ipro
    '   ProgressBar1.Refresh
    '   Form7.PausaSecond7  
    'End If
  Next J0
  'ProgressBar1.Value = 0
Case 1    'Зашифровать
  For J0 = NomerVxod1 To NomerVxod2
    Ich0 = Ich0 + 1
    Ich1 = Ich1 + 1
    L0 = Mid(textIsxod, J0, 1)
    AdresBazis = InStr(BazisVxod, L0)    'Адрес символа в базисе
    Select Case RotorVxod
    Case 0
      Select Case AdresBazis
      Case 0
        'Если символ отсутствует в алфавите, то копируется в результат без изменения
        If L0 <> Nothing Then Simvol = L0: Lbuilder.Append(Simvol, 1)
      Case Else
        Ich2 = Ich2 + 1
        Select Case LocalBB
        Case 0
          J1 = Ich0 Mod DlinaChaos
        Case 1
          J1 = Ich1 Mod DlinaChaos
        Case 2
          J1 = Ich2 Mod DlinaChaos
        Case Else
        End Select
        AdresChaos = ChaosVxod(J1)
        AdresOblik = AdresBazis - AdresChaos
        If AdresOblik < 1 Then AdresOblik = AdresOblik + DlinaBazis
        Simvol = Mid(OblikVxod, AdresOblik, 1)
        Lbuilder.Append(Simvol, 1)
 
      End Select
    Case Else
      Select Case AdresBazis
      Case 0
        'Если символ отсутствует в алфавите, то копируется в результат без изменения
        If L0 <> Nothing Then Simvol = L0: Lbuilder.Append(Simvol, 1)
      Case Else
        Ich2 = Ich2 + 1
        Select Case LocalBB
        Case 0
          J1 = Ich0 Mod DlinaChaos
        Case 1
          J1 = Ich1 Mod DlinaChaos
        Case 2
          J1 = Ich2 Mod DlinaChaos
        Case Else
        End Select
        AdresChaos = ChaosVxod(J1)
        AdresOblik = AdresBazis + AdresChaos
        If AdresOblik > DlinaBazis Then AdresOblik = AdresOblik - DlinaBazis
        Simvol = Mid(OblikVxod, AdresOblik, 1)
        Lbuilder.Append(Simvol, 1)
 
      End Select
    End Select
    'Необязательная часть
    'Ichet = Ichet + 1
    'If Ichet = Progres1 Then  
    '   Ipro = Int(((J0 - NomerVxod1 + 1) / (DlinaNomer)) * DlinaProgres): Ichet = 0
    '   ProgressBar1.Value = Ipro
    '   ProgressBar1.Refresh
    '   Form7.PausaSecond7
    'End If
  Next J0
  'ProgressBar1.Value = 0
Case Else
End Select
'Копирование не шифруемой конечной части текста без изменения
For J0 = NomerVxod2 + 1 to DlinaIsxod
  Simvol = Mid(textIsxod, J0, 1)
  Lbuilder.Append(Simvol, 1)
Next
textRez = Lbuilder.ToString
End Sub
 

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

Всего записей: 5 | Зарегистр. 22-02-2014 | Отправлено: 18:50 23-04-2014
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Судя из названий переменных навроде ProgressBar1 и Form7 вы не программировали ничего больше фигулины на 2 модуля по 10 килобайт. А исходя из фразы «шифрования текста универсальным алгоритмом» не имеете ни малейшего понятия о алгоритмах и шифровании. Это уже не говоря о том, что есть масса топиков по визуалбейсику, где этому, с позволения сказать, творению, дадут адекватную оценку заинтересованные люди.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 01:51 24-04-2014
LadyOfWood

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Соответственно, взлом невозможен.


Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 22:27 24-04-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
неуловимый Джо?

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 23:05 24-04-2014
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А какова цель поста? Поделиться радостью, что наконец создан универсальный алгоритм шифрования? )

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 23:06 24-04-2014
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR
Дык ведь алгоритм не только универсальный, но еще и невзламываемый

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 10:35 25-04-2014
AndrMan

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если сменить заголовок и описание, то таких возмущений не было бы Например: "пример из лабораторной работы по скрытию текста от чтения, предложите улучшения". Ну и убрать все фразы типа "невозможно определить", "взлом не возможен"...

Всего записей: 156 | Зарегистр. 29-03-2003 | Отправлено: 11:22 25-04-2014
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AndrMan
Само собой. Потому что  пример из лабораторной работы и универсальный невзламываемый алгоритм шифрования - это две большие разницы.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 12:07 25-04-2014
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
Я так полагаю, что если алгоритм шифрования публиковать везде в интернете, то он по факту становится уже не взламываемым.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 18:37 25-04-2014
LadyOfWood

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я так полагаю, что если алгоритм шифрования публиковать везде в интернете,

Стандартные алгоритмы шифрования вполне известны, что не делает их менее защищенными. В теории взломать можно все, а вот по факту.

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 20:00 25-04-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Исходный код шифрования текста универсальным алгоритмом.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru