Перейти к содержанию
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].

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

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


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

  • Сообщения

    • Curtismab
      Неотразимые мягкие места в уборной выставляют дивчины https://devkis.net на развратных фотках
    • Dmitrius
      БигПикча новости в фотографиях Бигпикча – это уникальный портал, который предлагает ознакомиться с самыми интересными и увлекательными новостями. Они понравятся каждому, кто всегда желает держать руку на пульсе и быть в курсе последних новостей, событий в мире. Этот портал уникален тем, что все материалы сопровождаются красочной фотографией для наглядности. Сайт приковывает к себе внимание с самых первых минут. Его хочется постоянно рассматривать, наслаждаться интересной подачей материала. Над его созданием трудились лучшие авторы, настоящие эксперты в своем деле, которые преподносят информацию таким образом, чтобы она понравилась людям любого возраста и независимо от социального положения. На bigpicture.ru только интересные, яркие новости на самые злободневные темы, а потому вы обязательно найдете что-то стоящее для себя. Есть любопытные статьи про животных, людей, еду, оригинальные вещи. Имеются факты, а также топы, которые интересно пересматривать вновь. Администрация сайта регулярно выкладывает статьи, которые помогут взглянуть на привычные вещи под другим углом. Если и вы хотите развлечься после трудового дня или в выходной, то скорей заходите на этот сайт, который знает, что вам предложить, чтобы разнообразить досуг и сделать его ярким, насыщенным. Авторы умеют удивлять, поэтому при составлении контента учитываются интересы всех читателей. Рассматриваются факты, о которых раньше вы даже не догадывались. Они прольют свет на многие вопросы. Новости в фотографиях, увлекательные путешествия, истории, лонгриды и многое другое представлено на этом сайте. Добавляйте его в закладки, чтобы не потерять, ведь этот портал является пищей для мозга, возможностью расширить свое сознание и повысить уровень интеллекта. Ищите любимый сайт в социальных сетях.
    • Curtismab
      Офигенные соски в усадьбе показывают глупышки https://devkis.net на эро фотокарточках
    • Dmitrius
      Арбитражный управляющий Каждый может оказаться в такой ситуации, когда требуется профессиональная и своевременная поддержка юриста. Если и вы вынуждены стать банкротом и оформить это по закону, то необходимо обратиться за такой услугой в центр банкротства. В компании работают квалифицированные специалисты с большим опытом, а в их багаже большое количество успешно завершенных дел. Именно поэтому вы сможете надеяться на отличный результат. Важно учесть тот момент, что специалисты детально изучают вопрос для того, чтобы подробно рассмотреть вопрос, после чего выявить возможности благоприятного результата. Списать долги Волгоград (Списание кредитов) получится по закону. Нет необходимости в том, чтобы переживать за процесс. Так специалисту удастся списать те долги, которые вы не в силах выплатить. Увы, но этот процесс может занять несколько месяцев, к тому же он не бесплатный. Банкротство физических лиц в Волгограде ведет компетентный сотрудник – он добросовестно и ответственно подойдет к решению вопроса. Он будет защищать интересы клиента, руководствуясь Конституцией. Юрист по банкротству займется оформлением документов и заявления, подготовит все факты в пользу того, чтобы объявить вас неплатежеспособным. Опыт сотрудников позволяет браться за дела различной сложности. Арбитражный управляющий Волгоград поможет вам избавиться от долгов. Что касается расценок, то на них влияют самые разные факторы, включая расходы на законодательном уровне. Подписывается договор на указание услуг – в нем указываются обязанности каждой стороны, набор услуг. Юрист рассмотрит все аспекты вашего дела. Важным моментом является то, что все ваши долги будут списаны в полном объеме при положительном исходе дела. Специалист использует все ресурсы, которые потребуются для того, чтобы получить положительный результат.
    • Dmitrius
      Септик в Москве и Московской области Компания долгое время и на выгодных условиях оказывает услуги, связанные со строительством автономной канализации в Москве и области. Если Вам необходима выгребная яма – ознакомьтесь с интересующей информацией на официальном портале. Автономная канализация, организованная на дачном участке, положительно влияет на уровень комфорта. Несмотря на то, планируется ли круглый год проживать на участке или только летом, вы почувствуете удобство. Цену на ее установку вы сможете узнать на сайте. Компания длительное время работает в данной сфере, а потому предлагает только выгодные условия, доступные цены, а сами работы выполняются быстро, аккуратно и в наиболее комфортное время. Она наладила сотрудничество с проверенными и надежными поставщиками оборудования. Специалисты создадут высокотехнологичную и работающую систему под ключ. В работе используются только надежные, качественные материалы, выполняются технологические условия. Если говорить о ценах, то они остаются на среднем уровне, а потому воспользоваться услугой смогут все, кто хочет. Кольцевой накопитель отлично подходит для сбора сточных вод при условии, что в доме на постоянной основе проживают до 7 человек. Все работы будут выполнены в минимальные сроки и тогда, когда это удобно именно вам. С собой будут все необходимые инструменты, а также материалы. Сотрудники осуществят установку и выполнят все нужные работы. При появлении вопросов задайте их сотрудникам, которые все пояснят, а также определят общую стоимость работ. Специалисты выполнят все необходимые работы, несмотря на время года. Отсутствуют дополнительные наценки, переплаты, только прозрачные условия сотрудничества.
×