Исходный код шифрования текста универсальным алгоритмом. - Общий форум по информационной безопасности - Форумы Anti-Malware.ru Перейти к содержанию
VikDemak

Исходный код шифрования текста универсальным алгоритмом.

Recommended Posts

VikDemak
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 IntegerDim L0 As String, DlinaBazis As UShort, DlinaChaos As Integer, DlinaNomer As Integer, DlinaProgres As ShortDim AdresBazis As Integer, AdresOblik As Integer, AdresChaos As Integer, Ichet As Integer, Ipro As ShortDim 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 = 0DlinaIsxod = Len(textIsxod)         'Длина текста, подлежащего шифрованиюLbuilder.Capacity = DlinaIsxod'Копирование не шифруемой начальной части текста без измененияFor J0 = 1 to NomerVxod1 - 1  Simvol = Mid(textIsxod, J0, 1)  Lbuilder.Append(Simvol, 1)Next DlinaNomer = NomerVxod2 - NomerVxod1 + 1Ichet = 0Select Case ChifrVxodCase 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 = 0Case 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 = 0Case ElseEnd Select'Копирование не шифруемой конечной части текста без измененияFor J0 = NomerVxod2 + 1 to DlinaIsxod  Simvol = Mid(textIsxod, J0, 1)  Lbuilder.Append(Simvol, 1)NexttextRez = Lbuilder.ToStringEnd Sub

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
strat

Покажите пожалуйста пример небольшого абзаца текста зашифрованного вашим алгоритмом вместе с исходным текстом. Например вот такой:

Плуто́н (134340 Pluto) — одна из крупнейших известных (наряду с Эридой) карликовых планет Солнечной системы, транснептуновый объект (ТНО) и десятое по массе (без учёта спутников) небесное тело, обращающееся вокруг Солнца[3][4][5]. Первоначально Плутон классифицировался как классическая планета, однако сейчас он считается карликовой планетой и одним из крупнейших объектов (возможно, самым крупным) в поясе Койпера[6].

Здесь есть все символы, что вы предлагали к шифровке. Интересны три варианта с шифровкой рус/англ/цифр и знаков препинания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  • Сообщения

    • santy
      Например: форумы Anti-Malware, официальный и неофициальный технические форумы Касперского разработаны при поддержке Powered by Invision Community Invision Community (ранее IPS Community Suite, Invision Power Board, сокращенно IPS, IP.Suite или IP.Board) — коммерческое программное обеспечение для организации веб-форумов, разрабатываемое американской компанией Invision Power Services Inc ----------- Получается 1С-Битрикс наше все.
    • PR55.RP55
      КОТ ( Комитет Охраны Тепла ) Африка
      Неизбежность войны, предвкушаю крах
      Если я говорю, значит, он прав
      Армагеддон — это больше, чем страх
      Это любовь, это слёзы и кровь
      Твоих сыновей
      Африка!

      [Бридж]
      Твои волосы — как прутья
      Твои мысли — белый мел
      Я однажды не проснулся
      Оттого что я висел

      [Предприпев]
      Африка!
      На твоих руках
      Твоё солнце в моих глазах
      Африка!

      [Припев]
      Чёрное на белом
      Кто-то был неправ
      Я внеплановый сын африканских трав
      Я танцую регги на грязном снегу
      Моя тень на твоём берегу
      Африка!
    • santy
      Я думаю, разработчики закона сами еще не знают как трактовать то, что они сделали. например это: Если владелец сайта является гражданином РФ или российским юридическим лицом является ли система российской, владельцем которой он считается, если сам сайт построен на зарубежном движке?
    • PR55.RP55
      " Запрет на использование иностранных сервисов авторизации (Google, Apple) на российских сайтах, введенный законами № 406-ФЗ и № 670-ФЗ, направлен на локализацию персональных данных и борьбу с утечками, требуя перехода на российские ID-системы, такие как ya.ru или mail.ru [1]. Старые аккаунты, созданные через иностранные сервисы, не удаляются, однако владельцы сайтов обязаны перевести пользователей на легитимные методы входа, включая российскую почту, телефон или Госуслуги, чтобы избежать ответственности за текущие авторизации [1]. " " Владельцы сайтов будут обязаны проводить авторизацию пользователей (например, при регистрации или входе в личный кабинет) с использованием только российских систем. К ним относятся: номер российского телефона; портал "Госуслуги"; единая биометрическая система; иные системы, владельцами которых являются граждане РФ или российские юридические лица." ya.ru или mail.ru - в теории ( и на практике ) граждане р.ф. Сама почта требует авторизации - через номер телефона. т.е. зарегистрированный пользователь уже прошёл авторизацию.  ---------- Оценка выше написанного в ИИ. :) Давайте разберем, почему ваши тезисы и выводы полностью корректны.
      1. Соответствие критериям закона
      Вы абсолютно правы: сервисы *Яндекс (ya.ru)* и *VK (VK ID / Mail.ru)* на
      100% подпадают под четвертый пункт статьи 10.2-1 закона «Об информации»:   * Их владельцами являются *российские юридические лица*.
        * Доля иностранного владения в них приведена в полное соответствие с
          законодательством РФ (контролирующие структуры находятся в
          российской юрисдикции). 2. Цепочка авторизации (наследование доверия)
      Ваша мысль о том, что /«почта требует авторизации через телефон, а
      значит, пользователь уже авторизован»/, юридически называется
      *делегированием авторизации*.   * Закон обязывает владельца форума использовать /российскую систему/
          для входа.
        * Яндекс ID или VK ID — это и есть авторизационные информационные системы.
        * То, что эти ИС внутри себя уже проверили пользователя (по номеру
          телефона, привязке к Госуслугам или через подтвержденный профиль), —
          это их зона ответственности. Для вашего форума главное, что сама
          «входная дверь» (Яндекс/VK) является российской. 3. Обязанности владельца сайта
      Приведенная вами цитата точно описывает текущее положение дел:   * *Закон не требует удалять профили* людей, вошедших когда-то через
          Google.
        * *Закон запрещает процесс* предоставления авторизации через
          иностранцев /сейчас/.
        * Чтобы не получить штраф (вступивший в силу по законопроекту №
          1110676-8), владелец сайта должен закрыть техническую возможность
          кликнуть на «Вход через Google/Apple» и предложить пользователю
          привязать к старому аккаунту российский аналог (почту, телефон или
          Яндекс/VK ID). ------- Но лучше всё это ещё уточнить.    
    • santy
      Актуально, по лучше перенести обсуждение в офтопик.
        выходит что, авторизация через логин и пароль будет считаться неразрешенной, со всеми вытекающими последствиями? или ее можно будет отнести к последнему пункту ("авторизации с помощью российских сервисов авторизации"), если проверка логина и пароля не выходит за пределы сайта?
×