Comme décrit dans la réponse précédente, un algorithme symétrique (dans lequel une seule clé secrète est utilisée pour crypter et décrypter) pourrait fonctionner. Il se trouve que j'ai une utilisation de l'algorithme DES. Cette routine de cryptage retourne la sortie du processus de cryptage (et le décryptage a comme entrée) une chaîne encodée en base64 plutôt qu'un tableau d'octets (qui est la sortie 'naturelle' des classes de cryptage de la structure).
Private key() As Byte = {}
Private IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
Private Const EncryptionKey As String = "abcdefgh"
Public Function Decrypt(ByVal stringToDecrypt As String) As String
Try
Dim inputByteArray(stringToDecrypt.Length) As Byte
key = System.Text.Encoding.UTF8.GetBytes(Left(EncryptionKey, 8))
Dim des As New DESCryptoServiceProvider
inputByteArray = Convert.FromBase64String(stringToDecrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return encoding.GetString(ms.ToArray())
Catch ex As Exception
'oops - add your exception logic
End Try
End Function
Public Function Encrypt(ByVal stringToEncrypt As String) As String
Try
key = System.Text.Encoding.UTF8.GetBytes(Left(EncryptionKey, 8))
Dim des As New DESCryptoServiceProvider
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
'oops - add your exception logic
End Try
End Function
Modifié ajouter:
Voici les importations que j'ai dans ce module:
Imports System
Imports System.IO
Imports System.Xml
Imports System.Text
Imports System.Security.Cryptography
Une clé DES est une longueur de 56 bits (un peu moins de 8 octets ou caractères) . Dans une «grande image», ce n'est pas considéré comme très sûr ces jours-ci (voir this Wikipedia article on key sizes), mais comme vous l'avez décrit «secure-ish», c'est peut-être OK. Si vous avez besoin d'un cryptage plus sécurisé, vous devez rechercher l'un des algorithmes les plus sécurisés.
La clé de chiffrement dans les routines ci-dessus se trouve dans la constante privée EncryptionKey. Changez cette valeur à la clé désirée. Ou vous pouvez implémenter votre propre gestion des clés (entrée à partir du fichier, demander à l'utilisateur, etc.).
Vous ne savez pas pourquoi Gauche et Convertir seraient cassés. Left est membre de Microsoft.VisualBasic.Strings et Convert est un membre de System.
Je vous recommande fortement de lire les articles liés à par Remus Rusanu, ainsi que les autres articles liés à ceux-ci. Ils vous fourniront beaucoup d'informations sur le chiffrement dans les classes de structure.
Bon, alors comment utiliser ces fonctions? Je suis encore un peu confus. Il suffit de chiffrer ("Somestringhere") et décrypter ("somestringhere")? Puis-je changer cette clé? Merci, on dirait qu'il pourrait le faire! – Cyclone
Combien de temps la clé peut-elle être? – Cyclone
Err, j'ai besoin d'importer un espace de noms ici clairement. Qu'est-ce que j'importe? – Cyclone