Вивчення асиметричної криптографії на основі шифросистеми RSA

Автор работы: Пользователь скрыл имя, 04 Декабря 2011 в 02:24, лабораторная работа

Краткое описание

Алгоритм шифрування RSA відноситься до криптографічних систем з відкритим ключем. Криптосистеми з відкритим ключем (асиметричні криптосистеми) були розроблені в другій половині сімдесятих років ХХ сторіччя. У асиметричних криптосистемах процедури прямого і зворотного криптоперетворення виконуються на різних ключах і не мають між собою очевидних і таких зв'язків, що легко простежуються, що дозволяють по одному ключу визначити інший. У такій схемі знання тільки ключа шифрування не дозволяє розшифрувати повідомлення, тому він не є секретним елементом шифру і зазвичай публікується учасником обміну для того, щоб будь-який охочий міг послати йому шифроване повідомлення.

Содержимое работы - 1 файл

Лабораторна робота9.doc

— 111.00 Кб (Скачать файл)

        Dim x1 As Integer = 0

        Dim y1 As Integer = 1

        Dim k, r, TempX, TempY As Integer

        x = 1                               'a11 - элемент матрицы

        y = 0                               'a12 - элемент матрицы

        Do

            k = a \ b

            r = a Mod b

            TempX = x1

            TempY = y1

            x1 = x - k * x1                 'a21 - элемент матрицы

            y1 = y - k * y1                 'a22 - элемент матрицы

            a = b

            b = r

            x = TempX

            y = TempY

        Loop Until r = 0

    End Sub 

    '-----------------Быстрое возведение в степень-----------------------------------'

    Private Function FastPower(ByVal Num As BigInteger, ByVal Power As Integer) As BigInteger

        Dim res As New BigInteger("1", 10) 

        While Power > 0

            If Power Mod 2 = 1 Then

                res *= Num

            End If

            Num *= Num

            Power \= 2

        End While

        FastPower = res

    End Function 

    Private Sub Encrypt(ByVal TempText As String, ByRef Crypt() As String) 

        For i = 0 To TempText.Length - 1

            ReDim Preserve Crypt(i)

            Crypt(i) = Convert.ToString(FastPower(Asc(TempText(i)), d) Mod n)

        Next

    End Sub 

    Private Sub Decrypt(ByVal Crypt() As String, ByRef TempText As String) 

        Dim intCrypt As Integer

        TempText = ""

        Try

            For i = 0 To Crypt.GetUpperBound(0)

                intCrypt = CInt(Crypt(i))

                TempText &= Chr(CInt(Convert.ToString(FastPower(intCrypt, KeyE) Mod n)))

            Next

        Catch ex As Exception

            MsgBox("Пустое либо недопустимое значение данных для дешифрования", MsgBoxStyle.Critical)

        End Try 

    End Sub 

    Private Sub RSA()

        Dim k As Integer

        n = p * q

        phi = (p - 1) * (q - 1)

        d = GetD()

        If phi > d Then

            FindE(phi, d, k, KeyE)

        Else

            FindE(d, phi, KeyE, k)

        End If

        If KeyE < 0 Then KeyE = KeyE + phi

    End Sub 

    Private Sub btnExecute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartBtn.Click 

        ErrorProvider1.Clear() 

        TempText = rtbSource.Text 

        If radCrypt.Checked Then 

            Try

                p = CInt(txtP.Text)

                q = CInt(txtQ.Text) 

                If p = 0 Or p = 1 Or q = 0 Or q = 1 Then

                    MsgBox("Недопустимое значение", MsgBoxStyle.Exclamation) 

                ElseIf Simple(p) And Simple(q) Then

                    RSA()

                    Encrypt(TempText, Crypt) 

                    txtD.Text = d.ToString

                    txtE.Text = KeyE.ToString

                    txtN.Text = CStr(p * q)

                    rtbCrypted.Text = Join(Crypt)

                ElseIf Not Simple(p) Then

                    MsgBox("P - нецелое число", MsgBoxStyle.Exclamation)

                ElseIf Not Simple(q) Then

                    MsgBox("Q - нецелое число", MsgBoxStyle.Exclamation)

                Else

                    MsgBox("P,Q - нецелые числа", MsgBoxStyle.Exclamation)

                End If

            Catch ex As Exception

                ErrorProvider1.SetError(txtP, "Одно из этих полей не заполнено, или заполнено не верно")

                ErrorProvider1.SetError(txtQ, "Одно из этих полей не заполнено, или заполнено не верно")

            End Try 

        ElseIf radDecrypt.Checked Then 

            Try

                KeyE = CInt(txtE.Text)

                n = CInt(txtN.Text) 

                Crypt = Split(TempText)

                Decrypt(Crypt, TempText) 

                rtbCrypted.Text = TempText

            Catch ex As Exception

                ErrorProvider1.SetError(txtE, "Одно из этих полей не заполнено, или заполнено не верно")

                ErrorProvider1.SetError(txtN, "Одно из этих полей не заполнено, или заполнено не верно")

            End Try 
 

        End If

    End Sub 

    Private Sub radCrypt_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles radCrypt.CheckedChanged

        txtP.Enabled = True

        txtQ.Enabled = True

        txtN.ReadOnly = True

        txtE.ReadOnly = True

Информация о работе Вивчення асиметричної криптографії на основі шифросистеми RSA