Σκοπός αυτού του άρθρου είναι να μας παρουσιάσει την υλοποίηση του RSA .
Δημιουργούμε πρώτα μία κλάση όπως παρακάτω.
Public
Class CryptographyClass
Public vPbKey As String
Public vPrKey As String
Public EncryptedByteArray() As Byte
Public DecryptedByteArray() As Byte
Public myKeySize As Integer
Public Function Encrypt(ByVal varData() As Byte, ByVal vPbKeyIn As String) As Boolean
Try
Dim Params As CspParameters = New CspParameters()
Params.Flags = CspProviderFlags.UseMachineKeyStore
Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider(Params)
RSA.FromXmlString(vPbKeyIn)
EncryptedByteArray = RSA.Encrypt(varData, False)
Return True
Catch ex as Exception
'Δέν αποκρυπτογραφήθηκε σωστά
Return False
End Try
End Function
Public Function Decrypt(ByVal varData() As Byte, ByVal vPrKeyIn As String) As Boolean
Try
Dim Params As CspParameters = New CspParameters()
Params.Flags = CspProviderFlags.UseMachineKeyStore
Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider(Params)
RSA.FromXmlString(vPrKeyIn)
DecryptedByteArray = RSA.Decrypt(varData, False)
Return True
Catch ex as Exception
'Δέν κρυπτογραφήθηκε σωστά
Return False
End Try
End Function
Public Function GetNewKey() As Boolean
Try
Dim Params As CspParameters = New CspParameters()
Params.Flags = CspProviderFlags.UseMachineKeyStore
Dim RSA As System.Security.Cryptography.RSACryptoServiceProvider = New RSACryptoServiceProvider(Params)
Me.vPbKey = RSA.ToXmlString(False)
Me.vPrKey = RSA.ToXmlString(True)
myKeySize = RSA.KeySize
Return True
Catch
Return False
End Try
End Function
End Class
Κατόπιν δημιουργούμε μία φόρμα ή οποία νά περιέχει ένα Button (Name=btnGenKey) και πέντε textbox
Name=txtPbKey, Name=txtPrKey,Name=txtToEncrypt,Name=EncryptedTxt,Name=DecryptedTxt
και ακόμα δύο Buttons Name=btnEncrypt,Name=btnDecrypt
Public
Class Form1
Inherits System.Windows.Forms.Form
Private EncryptClass As New CryptographyClass()
Private TargetToEncrypt() As Byte
Private Decrypted() As Byte
Private Encrypted() As Byte
'Δημιουργία Private και Public key
Private Sub btnGenKey_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenKey.Click
EncryptClass.GetNewKey()
Me.txtPrKey.Text = EncryptClass.vPrKey
Me.txtPbKey.Text = EncryptClass.vPbKey
End Sub
'Η Κρυπτογράφηση γίνεται πάντα μέ το Public Key
Private Sub btnEncrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncrypt.Click
Me.TargetToEncrypt = System.Text.Encoding.Default.GetBytes(Me.txtToEncrypt.Text)
If EncryptClass.Encrypt(Me.TargetToEncrypt, Me.txtPbKey.Text) = True Then
Me.Encrypted = EncryptClass.EncryptedByteArray
Me.EncryptedTxt.Text = System.Text.Encoding.Default.GetString(Me.Encrypted)
Else
MsgBox("Δέν μπορεί νά κρυπτογραφηθεί")
End If
End Sub
'Αποκρυπτογράφηση με το Private key που μόνο εμείς διαθέτουμε
Private Sub btnDecrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecrypt.Click
EncryptClass.Decrypt(
Me.Encrypted, Me.txtPrKey.Text)
Me.Decrypted = EncryptClass.DecryptedByteArray
Me.DecryptedTxt.Text = System.Text.Encoding.Default.GetString(Me.Decrypted)
End Sub
End Class
Ελπίζω το παραπάνω παράδειγμα νά σας φανεί χρήσιμο.