Автор работы: Пользователь скрыл имя, 04 Декабря 2011 в 02:24, лабораторная работа
Алгоритм шифрування RSA відноситься до криптографічних систем з відкритим ключем. Криптосистеми з відкритим ключем (асиметричні криптосистеми) були розроблені в другій половині сімдесятих років ХХ сторіччя. У асиметричних криптосистемах процедури прямого і зворотного криптоперетворення виконуються на різних ключах і не мають між собою очевидних і таких зв'язків, що легко простежуються, що дозволяють по одному ключу визначити інший. У такій схемі знання тільки ключа шифрування не дозволяє розшифрувати повідомлення, тому він не є секретним елементом шифру і зазвичай публікується учасником обміну для того, щоб будь-який охочий міг послати йому шифроване повідомлення.
Dim x1 As Integer = 0
Dim y1 As Integer = 1
Dim k, r, TempX, TempY As Integer
x = 1 'a11 - элемент матрицы
y = 0
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(
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(
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