LevelcodeLicenseAPP/Security/RsaService.cs
2026-03-25 16:26:11 -03:00

70 lines
2.2 KiB
C#

using System;
using System.Security.Cryptography;
using System.Text;
namespace LevelCode.License.Security
{
public static class RsaService
{
// =========================
// GERAR PAR DE CHAVES
// =========================
public static void GerarParDeChaves(
out string chavePublica,
out string chavePrivada,
int tamanho = 2048)
{
using (var rsa = new RSACryptoServiceProvider(tamanho))
{
chavePublica = rsa.ToXmlString(false); // public key
chavePrivada = rsa.ToXmlString(true); // private key
}
}
// =========================
// ASSINAR TEXTO (PRIVATE KEY)
// =========================
public static string Assinar(string texto, string chavePrivada)
{
if (string.IsNullOrWhiteSpace(texto))
throw new ArgumentException("Texto inválido para assinatura.");
using (var rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(chavePrivada);
byte[] dados = Encoding.UTF8.GetBytes(texto);
byte[] assinatura = rsa.SignData(dados, CryptoConfig.MapNameToOID("SHA256"));
return Convert.ToBase64String(assinatura);
}
}
// =========================
// VALIDAR ASSINATURA (PUBLIC KEY)
// =========================
public static bool ValidarAssinatura(
string texto,
string assinaturaBase64,
string chavePublica)
{
if (string.IsNullOrWhiteSpace(texto) ||
string.IsNullOrWhiteSpace(assinaturaBase64))
return false;
using (var rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(chavePublica);
byte[] dados = Encoding.UTF8.GetBytes(texto);
byte[] assinatura = Convert.FromBase64String(assinaturaBase64);
return rsa.VerifyData(
dados,
CryptoConfig.MapNameToOID("SHA256"),
assinatura);
}
}
}
}