Olá a todos!
Estou cursando Ciência da Computação, primeiro semestre e me foi dado um trabalho para entregar até dia 27, ele basicamente diz para que eu ache um código de criptografia RSA em C# e depois explique-o linha por linha (ou bloco por Bloco), de forma que até
quem não conheça o código consiga entender durante a apresentação
Acontece que sou bem iniciante na área da programação, achei o código, está rodando perfeitamente, porém não sei explicar praticamente nada sobre ele, poderiam me ajudar? Explicar o que cada linha/bloco de comando faz e uma explicação geral do programa todo?
Obrigado à todos.
Segue o código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using Timer = System.Timers.Timer;
using System.IO;
using System.Xml.Serialization;
namespace RSAA
{
public class RsaEnc
{
private static RSACryptoServiceProvider csp = new RSACryptoServiceProvider(2048);
private RSAParameters _privateKey;
private RSAParameters _publicKey;
public RsaEnc()
{
_privateKey = csp.ExportParameters(true);
_publicKey = csp.ExportParameters(false);
}
public string PublicKeySring()
{
var sw = new StringWriter();
var xs = new XmlSerializer(typeof(RSAParameters));
xs.Serialize(sw, _publicKey);
return sw.ToString();
}
public string Encrypt(string plainText)
{
csp = new RSACryptoServiceProvider();
csp.ImportParameters(_publicKey);
var data = Encoding.Unicode.GetBytes(plainText);
var cypher = csp.Encrypt(data, false);
return Convert.ToBase64String(cypher);
}
public string Decrypt(string cypherText)
{
var dataBytes = Convert.FromBase64String(cypherText);
csp.ImportParameters(_privateKey);
var plaintext = csp.Decrypt(dataBytes, false);
return Encoding.Unicode.GetString(plaintext);
}
}
class Program
{
static void Main(string[] args)
{
RsaEnc rs = new RsaEnc();
string cypher = String.Empty;
Console.WriteLine($"Chave Publica: \n {rs.PublicKeySring()}\n");
Console.WriteLine("Entre com o texto para Encriptar");
var text = Console.ReadLine();
if (text != String.Empty)
{
cypher = rs.Encrypt(text);
Console.WriteLine($"Texto Encriptado:\n {cypher} \n");
}
Console.WriteLine("Pressione enter para Decriptar");
Console.ReadLine();
var plainText = rs.Decrypt(cypher);
Console.WriteLine("Texto Decriptado:\n");
Console.WriteLine(plainText);
Console.ReadLine();
}
}
}