Criptografia .Net com Delphi

Pessoal,

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?

Como assim, por que não podem usar bibliotecas? Por que dificultar quando já podem resolver o problema?

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.

Att

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.

No mais, veja se isso te ajuda:

Jovem,

No delphi a Dll funciona normal.

No C# ocorre o seguinte erro:

An unhandled exception of type 'System.AccessViolationException' occurred in WindowsFormsApplication1.exe

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.

Jovem, vamos testar essa ideia sua.

Não vou fechar o tópico por enquanto. Te dou noticias.
Obrigado pela ajuda.