Criptografia de dados e descriptografia em C#
Às vezes, em algum lugar temos que executar criptografia e descriptografia de dados. Então hoje eu vou mostrar como criptografar e descriptografar dados em nosso aplicativo. Para esta demonstração, usei o aplicativo WPF. Fazer criptografia e descriptografia é fácil, mas temos que lembrar/saber poucas coisas. Este exemplo mostra como você pode usar c# para criptografar e descriptografar strings usando uma chave de sal para proteger os dados.
Esse tipo de criptografia é chamada de criptografia de chave simétrica, o que significa que a sequência só pode ser descriptografada se a outra parte tiver a chave correta (que é usada para criptografia).
Então aqui está o código para criptografia e descriptografia.
using System;
using System.Security.Cryptography;
using System.Text;
namespace DataEncrypterDecrypter
{
public class CryptoEngine
{
public static string Encrypt(string input, string key)
{
byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
tripleDES.Mode = CipherMode.ECB;
tripleDES.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tripleDES.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
tripleDES.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string input, string key)
{
byte[] inputArray = Convert.FromBase64String(input);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
tripleDES.Mode = CipherMode.ECB;
tripleDES.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tripleDES.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
tripleDES.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
}
}
Como você vê em código, o CipherMode e o PaddingMode devem ser os mesmos para ambas as operações. Existem várias opções para CipherMode e PaddingMode, você pode ler suas diferenças e escolher qual delas é a melhor para sua necessidade. No caso da chave que passamos como parâmetro para ambas as operações, deve ser o mesmo para ambos. Esta chave é o que seu aplicativo usa para criptografia e descriptografia que você deve manter em segredo outra pessoa pode descriptografar seus dados com essa chave e deve ser de 128 bits ou 192 bits (nem mesmo no meio). Se você não sabe que sua chave fornecida é de 128/192 bits ou não, você pode usar este aplicativo para cálculo de bits.
Aqui está como eu usei para propósito de demonstração.
private void encryptbtn_Click(object sender, RoutedEventArgs e)
{
if(plaintext.Text!= string.Empty)
{
//Here key is of 128 bit
//Key should be either of 128 bit or of 192 bit
Ciphertext.Text = CryptoEngine.Encrypt(plaintext.Text, "sblw-3hn8-sqoy19");
}
}
private void decryptbtn_Click(object sender, RoutedEventArgs e)
{
if(Ciphertext.Text != string.Empty)
{
//Key shpuld be same for encryption and decryption
decryptedtext.Text = CryptoEngine.Decrypt(Ciphertext.Text, "sblw-3hn8-sqoy19");
}
}
É isso, é isso. Agora você pode usar esses métodos/operações de acordo com sua necessidade. Você pode baixar o código de amostra daqui.
Autor: Janak Shrestha