Preciso de um código simples de criptografia que possa ser escrito em C# e Delphi. Infelizmente não podemos usar dll’s e nem frameworks de terceiros. Achei alguns códigos em Delphi mas não tive sucesso ao passar ele para C#.
Alguém tem algum exemplo de criptografia que possa passar?
Então!
O Gestor do projeto não gosta de usar framework de terceiros!
Por mim eu fazia em C# mesmo e boa!
Mas ainda temos aplicações que roda em Delphi, por isso a demanda.
Além dele não deixar você usar componentes de terceiro para Delphi, ele também não deixa você desenvolver sua própria biblioteca em C# para ser chamada no Delphi? A classe Rijndael por exemplo é nativa do .NET, não é de terceiro.
Certo!
O que pega é o seguinte: Na parte do Delphi não pode ter coisas de terceiro, regra da empresa e sofrimento para o desenvolvedor, por exemplo, o outro desenvolvedor aqui fez um boleto todo em Canvas pq a chefia não gosta que usa gerador de relatórios. Já a parte que desenvolvemos em C# é mais livre, podemos usar algumas coisas prontas que não tem problema.
A principio fizemos uma criptografia no Delphi sem usar componente de terceiro e tentamos criar uma DLL para usar no C#, só que o retorno do Delphi esta caducando no C#.
Segue os códigos
Delphi - Esta recebendo um Texto e retorna o mesmo criptografado, so que no C# não estamos conseguindo receber um simples texto.
library DllDelphiWs;
uses
System.SysUtils,
System.Classes,
EZCrypt in 'EZCrypt.pas';
{$R *.res}
function Criptografar (Texto: String): WideString; stdcall; export;
var Key: TWordTriple;
TextoI: String;
AnsString : AnsiString;
begin
Result:= 'RETORNAR UM SIMPLES TEXTO';
end;
exports Criptografar;
begin
end.
Segue o Codigo em C#
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
String t = textBox1.Text;
string s = Criptografar(t);
richTextBox1.Text = t;
}
[DllImport(@"C:\projetos\DelphiDllWebService\Win32\Debug\DllDelphiWs.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern string Criptografar([MarshalAs(UnmanagedType.BStr)]string Result);
}
}
Nesse caso temos que resolver o retorno que vem do Delphi.
Retorna algum erro? Retorna em branco? Ou o que retorna? Debugou a DLL? Já testou a chamada da DLL Delphi através de um programa em Delphi pra ver se o problema não é na sua DLL do lado Delphi? Deixe a DLL Delphi no mesmo lugar que tiver o programa ou coloque no System32, pra não precisar cravar o endereço.
Se já tentou de tudo pesquisando, parte pra outra, em último caso cria uma aplicação console no Delphi e chama no .NET.
Delphi:
program ProgramaDelphi;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
begin
write('retornando do Delphi com parametro recebido do .NET: ' + paramstr(1));
end.
.NET:
var info = new ProcessStartInfo();
info.FileName = "ProgramaDelphi.exe";
info.Arguments = "teste";
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
using (Process process = Process.Start(info))
{
//usar o retorno
var retorno = process.StandardOutput.ReadLine();
}
Agora, se teu gestor não te deixar usar isso também, então ele tem que te dar uma solução. Afinal querem resolver o problema fim realmente ou só ficar em caprichos de TI.