70 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|