Crypter et décrypter une chaîne en C#

  1. Crypter une chaîne avec la classe AesManaged en C
  2. Décrypter une chaîne avec la classe AesManaged en C

Ce didacticiel abordera les méthodes de chiffrement et de déchiffrement d’une chaîne en C#.

Crypter une chaîne avec la classe AesManaged en C

Le cryptage est le processus de conversion des données en texte chiffré afin que toute personne non autorisée ne puisse pas accéder aux données. Dans ce tutoriel, nous utiliserons l’algorithme Advanced Encryption Standard (AES) pour crypter et décrypter une chaîne en C#. La classe AesManaged fournit des méthodes pour crypter et décrypter notre chaîne en utilisant l’algorithme AES. La fonction CreateEncryptor() peut crypter les données à l’aide d’une clé. Nous devons passer nos clés de chaîne à la fonction CreateEncryptor(). L’exemple de code suivant nous montre comment chiffrer une chaîne selon l’algorithme AES avec la fonction CreateEncryptor() en C#.

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace encrypt_decrypt_string
{
    class Program
    {
        static string Encrypt()
        {
            try
            {
                string textToEncrypt = "WaterWorld";
                string ToReturn = "";
                string publickey = "12345678";
                string secretkey = "87654321";
                byte[] secretkeyByte = { };
                secretkeyByte = System.Text.Encoding.UTF8.GetBytes(secretkey);
                byte[] publickeybyte = { };
                publickeybyte = System.Text.Encoding.UTF8.GetBytes(publickey);
                MemoryStream ms = null;
                CryptoStream cs = null;
                byte[] inputbyteArray = System.Text.Encoding.UTF8.GetBytes(textToEncrypt);
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    ms = new MemoryStream();
                    cs = new CryptoStream(ms, des.CreateEncryptor(publickeybyte, secretkeyByte), CryptoStreamMode.Write);
                    cs.Write(inputbyteArray, 0, inputbyteArray.Length);
                    cs.FlushFinalBlock();
                    ToReturn = Convert.ToBase64String(ms.ToArray());
                }
                return ToReturn;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex.InnerException);
            }
        }
        static void Main(string[] args)
        {
            string encrypted = Encrypt();
            Console.WriteLine(encrypted);
        }
    }
}

Production:

6+PXxVWlBqcUnIdqsMyUHA==

Dans le code ci-dessus, nous avons chiffré la chaîne WaterWorld avec les clés publickey et secretkey et renvoyé le 6+PXxVWlBqcUnIdqsMyUHA== sous forme de chaîne chiffrée. Les deux clés doivent comporter au moins 8 caractères.

Décrypter une chaîne avec la classe AesManaged en C

Le déchiffrement est le processus de conversion du texte chiffré en données d’origine afin que les personnes autorisées puissent accéder aux données. La fonction CreateDecryptor() permet de décrypter les données à l’aide d’une clé. Nous devons passer nos clés de chaîne à la fonction CreateEncryptor(). Les clés doivent être les mêmes que celles utilisées dans la fonction CreateDecryptor(). L’exemple de code suivant nous montre comment chiffrer une chaîne selon l’algorithme AES avec la fonction CreateDecryptor() en C#.

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace encrypt_decrypt_string
{
    class Program
    {
        static string Decrypt()
        {
            try
            {
                string textToDecrypt = "6+PXxVWlBqcUnIdqsMyUHA==";
                string ToReturn = "";
                string publickey = "12345678";
                string secretkey = "87654321";
                byte[] privatekeyByte = { };
                privatekeyByte = System.Text.Encoding.UTF8.GetBytes(secretkey);
                byte[] publickeybyte = { };
                publickeybyte = System.Text.Encoding.UTF8.GetBytes(publickey);
                MemoryStream ms = null;
                CryptoStream cs = null;
                byte[] inputbyteArray = new byte[textToDecrypt.Replace(" ", "+").Length];
                inputbyteArray = Convert.FromBase64String(textToDecrypt.Replace(" ", "+"));
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    ms = new MemoryStream();
                    cs = new CryptoStream(ms, des.CreateDecryptor(publickeybyte, privatekeyByte), CryptoStreamMode.Write);
                    cs.Write(inputbyteArray, 0, inputbyteArray.Length);
                    cs.FlushFinalBlock();
                    Encoding encoding = Encoding.UTF8;
                    ToReturn = encoding.GetString(ms.ToArray());
                }
                return ToReturn;
            }
            catch (Exception ae)
            {
                throw new Exception(ae.Message, ae.InnerException);
            }
        }
        static void Main(string[] args)
        {
            string decrypted = Decrypt();
            Console.WriteLine(decrypted);
        }
    }
}

Production:

WaterWorld

Dans le code ci-dessus, nous avons converti la chaîne cryptée 6+PXxVWlBqcUnIdqsMyUHA== de l’exemple précédent à sa forme originale WaterWorld avec les clés publickey et secretkey. Les clés doivent être les mêmes que les clés utilisées dans l’exemple précédent pour que cette méthode fonctionne.

Article connexe - Csharp String

  • Utiliser des chaînes dans l'instruction Switch en C#
  • Convertir une chaîne en objet JSON en C#