Rotina em c# para harbour
Enviado: 12 Dez 2025 11:20
Poderiam converter esta rotina em habour puro? a Primeira para é fácil (postei somente para conhecimento do uso), mas a segunda nem o chagt conseguiu uma forma funcional. obg
Att.
Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®
https://malc-informatica.ueniweb.com
Insta: @malcarli25
Email / Skype: marceloalcarli@gmail.com
Att.
Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®
https://malc-informatica.ueniweb.com
Insta: @malcarli25
Email / Skype: marceloalcarli@gmail.com
Código: Selecionar todos
** Program.cs
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
/*
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
*/
if (System.IO.File.Exists(@"StringParaAssinar.txt"))
{
string[] lines = System.IO.File.ReadAllLines(@"StringParaAssinar.txt");
string[] aDados = new string[2];
aDados[0] = lines[0]; // Numero de Série Certificado;
aDados[1] = lines[1]; // String a Assinar.
MessageBox.Show(aDados[0]);
MessageBox.Show(aDados[1]);
AssinarRPS assina = new AssinarRPS();
String assinatura = assina.AssinarRPSSP(aDados[0], aDados[1]);
MessageBox.Show(assinatura);
//Declaração do método StreamWriter passando o caminho e nome do arquivo que deve ser salvo
StreamWriter writer = new StreamWriter(@"StringAssinada.txt");
//Escrevendo o Arquivo e pulando uma linha
writer.WriteLine(assinatura);
//Fechando o arquivo
writer.Close();
//Limpando a referencia dele da memória
writer.Dispose();
}
}
}
*** ASSINARPS.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
namespace WindowsFormsApplication1
{
public class AssinarRPS
{
public AssinarRPS() { }
public string AssinarRPSSP(string serial, string original)
{
//X509Store store = new X509Store(StoreLocation.LocalMachine);
X509Store store = new X509Store();
store.Open(OpenFlags.ReadOnly);
string sn = serial, criptografada; //" put here your certificate serial number ";
criptografada = "";
X509Certificate2Collection coll = store.Certificates.Find(X509FindType.FindBySerialNumber, serial, true);
X509Certificate2 cert = null;
Console.WriteLine(coll.Count);
if (coll.Count > 0 && coll[0] != null)
{
cert = coll[0];
}
else return "Erro ao assinar RPS";
//recebe o certificado e a string a ser assinada
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//pega a chave privada do certificado digital
rsa = cert.PrivateKey as RSACryptoServiceProvider;
MessageBox.Show(rsa);
//cria o array de bytes e realiza a conversao da string em array de bytes
byte[] sAssinaturaByte = enc.GetBytes(original);
MessageBox.Show(sAssinaturaByte);
RSAPKCS1SignatureFormatter rsaf = new RSAPKCS1SignatureFormatter(rsa);
MessageBox.Show(rsaf);
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
MessageBox.Show(sha1);
//cria a variavel hash que armazena o resultado do sha1
byte[] hash;
hash = sha1.ComputeHash(sAssinaturaByte);
MessageBox.Show(hash);
//definimos o metodo a ser utilizado na criptografia e assinamos
rsaf.SetHashAlgorithm("SHA1");
sAssinaturaByte = rsaf.CreateSignature(hash);
MessageBox.Show(sAssinaturaByte);
//por fim fazemos a conversao do array de bytes para string
criptografada = Convert.ToBase64String(sAssinaturaByte);
MessageBox.Show(criptografada);
return criptografada;
}
}
}