Imports System.Security.Cryptography
Imports CSInteropKeys
Public Class RSA
Shared PUBLIC_KEY As String = "-----BEGIN PUBLIC KEY-----\n" + "MIIBUzANBgkqhkiG9w0BAQEFAAOCAUAAMIIBOwKCATIAq8EYkkGCUg86Bf2CHaM1z1Q2ahQgVXkx\n" + "49I0igwTVCIqG86jsgNb22na1DThZ+IP7DfyBszIecVSP8nwbYPbx6Z7dwq4pnMVx/lx5lyMZUO1\n" + "HGEkw1S06AlfXzSg58ci5DL9RJ9ZIa1oMDKtrZiNYA5C3L+7NSCVp/2H/yypWkDjzkFan65+TN\n" + "RExo/2O3+MytJtQ/BXVkbYD58+iiZegddNTNGvz8WlPz2cZvPQt4x1TN+KOgJRKZH5imNAxCtRg6\n" + "l1OLVxfwwUjKFgM4uAsto8vJv5DUFZQMO1Sh9gMpmzeMwXIF4fDD4O1TNiVmu3ABybt2Y4EdaQhs\n" + "ponC0SNcWbrY0stYbX+Wpk9/Hcxmo3zoduf1ZAdGM01E1g3IjQMd0gOP4v1KQtBjoHim2MCAwEA\n" + "AQ==\n" + "-----END PUBLIC KEY-----"
Friend Shared Crypt As RSACryptoServiceProvider
Friend Shared rsaParameter As RSAParameters
Friend Shared KEY_HEADER As String = "-----BEGIN PUBLIC KEY-----"
Friend Shared KEY_FOOTER As String = "-----END PUBLIC KEY-----"
Public Shared Function cipherRsaString(ByVal key As String, ByVal password As String) As String
'On encode la _key reçus dans HelloConnectMessage avec le mot de passe en Bytes.
Dim Input() As Byte = System.Text.Encoding.UTF8.GetBytes(key + password)
'On déclare un nouveau Service de cryptage RSA pour chiffrer et déchiffrer.
Crypt = New RSACryptoServiceProvider
'On convertit la PUBLIC_KEY en un tableau d'entiers de 8bits.
Dim BinaryData() As Byte = GetPublicKey()
'On utilise CSInteropKeys pour parser la clé et obtenir les informations du cryptage RSA.
Dim KeyParser As New AsnKeyParser(BinaryData)
rsaParameter = KeyParser.ParseRSAPublicKey()
'On importe les paramètres dans notre service de cryptage.
Crypt.ImportParameters(rsaParameter)
'On encrypte La clé, avec le mot de passe, celon les paramètres de la public key.
Dim Ouput() As Byte = Crypt.Encrypt(Input, False)
'On convertit notre tableau de bytes en chaine de caractère, et on la renvoit en résultat de fonction.
Return System.Convert.ToBase64String(Ouput)
End Function
'Fonction développée par Maxilia.
Friend Shared Function GetPublicKey() As Byte()
'On définie deux index pour lire la PublicKey
Dim Index1 As Integer = KEY_HEADER.Length
Dim Index2 As Integer = PUBLIC_KEY.IndexOf(KEY_FOOTER) - Index1
'On obtient ici la PublicKey sans le header et le footer
Dim Temp As String = PUBLIC_KEY.Substring(Index1, Index2)
'On supprime les saut de ligne
Temp = Temp.Replace("\n", "")
'On convertie la Key en Byte et on la retourne.
Return Convert.FromBase64String(Temp)
End Function
End Class